WPAlchemy MediaAccess, вставляющий медиа-ссылку в редакторе WP вместо пользовательского поля в метабоксе

В настоящее время я работаю с классом WPAlchemy для создания метабокса в настраиваемом типе сообщений (события из плагина EventEspresso более точно).

Этот обменный код должен иметь возможность вызвать медиа-загрузчик и вставлять изображения для некоторых пользовательских метаданных.

Он работает очень хорошо, я могу вызвать медиа-загрузчик и сохранять данные из текстовых полей. Но после открытия медиа-загрузчика выберите изображение и нажмите «Вставить в сообщение». Ссылка изображения идет в WP Editor textarea вместо моего текстового поля в пользовательском метабоксе.

Спасибо, парни. Надеюсь, его достаточно ясно и жаль, вероятно, не очень хорошо написанный английский.

Мне удалось это решить. Проблема заключалась в использовании пользовательского пост-типа с Metabox.php / MediaAccess.php (как из класса WPAlchemy)

Предположительно, вы можете использовать пользовательские пост-типы с WPAlchemy, поскольку при создании экземпляра объекта WPAlchemy_MetaBox вы можете передать некоторые необязательные параметры, чтобы включить такой способ вычисления. Как это:

$mb = $my_custom_metabox = new WPAlchemy_MetaBox(array ( 'id' => '_palestrantes_metabox', 'title' => 'Palestrantes', 'types' => array('post','espresso_events'), 'template' => get_stylesheet_directory() . '/metaboxes/custom-meta.php' )); 

Но в MetaBox.php функция _init использует некоторый код проверки для продолжения:

 559 // must be creating or editing a post or page 560 if ( ! WPAlchemy_MetaBox::_is_post() AND ! WPAlchemy_MetaBox::_is_page()) return; 

Обе функции _is_post () и _is_page () завершают вызов

 static function _get_current_post_type() { $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : NULL ; if ( isset( $uri ) ) { $uri_parts = parse_url($uri); $file = basename($uri_parts['path']); if ($uri AND in_array($file, array('post.php', 'post-new.php'))) { $post_id = WPAlchemy_MetaBox::_get_post_id(); $post_type = isset($_GET['post_type']) ? $_GET['post_type'] : NULL ; $post_type = $post_id ? get_post_type($post_id) : $post_type ; if (isset($post_type)) { return $post_type; } else { // because of the 'post.php' and 'post-new.php' checks above, we can default to 'post' return 'post'; } } } return NULL; } 

Проблема здесь заключается в проверке через URI, она предполагает, что каждый пост или страница будет иметь «post.php» или «post-new.php» в своем URI. Что в моем случае получилось:

/wp-admin/admin.php?page=espresso_events&message=1&action=edit&post=1750&edit_nonce=2de45bf97b&return=editpost

Так что исправить это (не гордый btw). Мне пришлось добавить еще одну проверку в Metabox.php / MediaAccess.php, чтобы также разрешить выполнение, когда «page = espresso_events» и «action = edit»

Ну, вот и все. Надеюсь, поможет. Благодарю.

Следующее исправление отлично работало для меня:

Откройте MediaAccess.php и замените строку 368:

Старая линия:

 $('[class*="<?php echo $this->button_class_name; ?>"]').on('click', function() 

Новая строка кода:

 $('body').on('click', '[class*=<?php echo $this->button_class_name; ?>]', function() 

Решение найдено по этой ссылке: https://github.com/maniaks/wpalchemy/commit/9e55cd9c3071b57b83ff1e8bc86564478d2eb873