Intereting Posts
Позвольте клиенту выбрать дополнительный бесплатный / платный продукт, чтобы добавить в свой заказ (и уменьшить сокращение запасов и рекордную продажу) WordPress Multisite – можно ли разместить основной сайт в подкаталоге? Получите автора meta добавляет <p> сейчас Установить действующее состояние меню для пользовательского типа и категории, если заданный термин таксономии Вручную установить выбранное пользовательское подменю? Извлечение ссылок внутри тегов в WordPress Как сделать ссылку «больше» ссылкой на сообщение вместо списка категорий Вставить WordPress Admin в iframe Несколько логических циклов типа пользовательских сообщений Как избежать дублирования одного и того же meta_value? Проблема миграции Как показать сообщение только после пользовательской даты Как изменить теги рядом с отображаемым изображением на моих сообщениях? Как создать настраиваемый шаблон для пользовательской таксономии wp-tag-cloud? Создать список ul в Custom Meta Box?

Доступ к среде административной страницы с другой страницы администратора

Я был занят размышлением о проблеме, и до сих пор я не нашел для нее решения.

Абстрактный сценарий

На странице admin A я хотел бы напечатать значение (глобальной) переменной – в контексте страницы администрирования B.

Конкретный сценарий

На странице пользовательских параметров я хотел бы перечислить все обменные ящики, зарегистрированные для каждого типа сообщений.

Оба плагина и тема могут добавлять / удалять обмены по отношению к текущему контексту страницы ( $pagenow ). Таким образом, глобальный $wp_meta_boxes настроен в этом контексте.


До сих пор я читал практически любой крючок, много читал на AJAX (правильные и неправильные способы) и пробовал множество различных подходов, которые я придумал. К несчастью, без везения.

Вопрос

Можно ли получить значение $wp_meta_boxes на странице администратора post-new.php?post_type=my_super_duper_post_type , например, с другой страницы администратора?

Если да, то как я могу это сделать?

Можно ли это сделать через AJAX?
Или я могу обмануть плагины / тему, думая, что текущая страница – post-new.php?post_type=my_super_duper_post_type , например, пока мы на самом деле на странице моих опций?

Solutions Collecting From Web of "Доступ к среде административной страницы с другой страницы администратора"

Хорошо, это может быть достигнуто именно так, вероятно.

 add_action('add_meta_boxes_my_super_duper_post_type', 'get_metabox_global_ajax', 9999 ); function get_metabox_global_ajax(){ if( isset($_GET['mgv']) && $_GET['mgv'] == '1' ){ global $wp_meta_boxes; @error_reporting( 0 ); header( 'Content-type: application/json' ); die( json_encode( $wp_meta_boxes )); } } 

Теперь вы отправляете запрос со своей страницы плагина для post-new.php?post_type=my_super_duper_post_type&mgv=1 через ajax и используете возвращенный json-ответ переменных wp_meta_boxeses.

Благодаря @Shazzad и @GM я нашел правильный путь.

Вот краткое описание того, что я сделал:

Действие JavaScript / AJAX

 jQuery(function($) { for (var i = 0; i < localizedData.postTypes.length; ++i) { $.ajax({ type: 'post', url: 'post-new.php?post_type='+localizedData.postTypes[i], data: { action: 'my-plugin-action', _ajax_nonce: localizedData.nonce }, success: function(data) { if (data) { doSomethingWithTheBoxes(data.metaBoxes); } } }); } }); 

Заполните файл JavaScript для моей страницы пользовательских параметров

 $post_types = array( 'post', 'page', 'my_custom_post_type', ); if ('users' === basename($pagenow, '.php')) add_action('admin_print_scripts-users_page_my-plugin-page', 'MyPlugin_enqueue_scripts'); function MyPlugin_enqueue_scripts() { $data = array( 'nonce' => wp_create_nonce('my_plugin_nonce'), 'postTypes' => $post_types, ); $handle = 'my-plugin-js'; wp_enqueue_script( $handle, plugin_dir_url(__FILE__).'my-plugin.js', array('jquery'), filemtime(plugin_dir_path(__FILE__).'my-plugin.js'), true ); wp_localize_script($handle, 'localizedData', $data); } // function MyPlugin_enqueue_scripts 

Настройте правый крючок для обработки запроса AJAX

 global $pagenow; if ('post-new' === basename($pagenow, '.php')) add_action('do_meta_boxes', 'MyPlugin_get_meta_boxes', PHP_INT_MAX); function MyPlugin_get_meta_boxes($post_type) { if ( 'my-plugin-action' == filter_input(INPUT_POST, 'action') && in_array($post_type, $post_types) ) { check_ajax_referer('my_plugin_nonce'); wp_send_json(array( 'metaBoxes' => $GLOBALS['wp_meta_boxes'] )); } } // function MyPlugin_get_meta_boxes 

Теперь я могу получить все зарегистрированные мета-боксы для любого типа сообщений, которые я хотел бы, находясь на другой странице администратора.