Intereting Posts
Изменить ссылки в комментариях пользователей Как вы разрабатываете и обновляете, когда получаете новые требования к уже существующему сайту? Контактная форма 7 «не подлежащих выбору» вариантов в раскрывающемся списке WP_Query настраиваемого типа сообщений не работает Экспорт таблицы wordpress в Excel Как добавить WordPress nonces в ajax-запрос Получение / подача / позади URL-адресов в Инструментах Google для веб-мастеров; ошибки искателя? Как переписать статический URL страницы в wordpress Могу ли я использовать wordpress для сайта без блога? Как узнать, какое меню запускает ссылку? Динамическое присвоение настраиваемого шаблона настраиваемым сообщениям типа post Как перезапустить мой цикл с помощью get_next_post ()? Как получить значение wpnonce? register_uninstall_hook () vs uninstall.php – какой из них лучше справиться с скриптом удаления плагина? Multisite – создание пользователя для второго сайта с первого сайта?

Ошибка с пользовательским экраном администратора в iframe Thickbox

У меня есть плагин, который добавляет новый экран администратора в iframe. Я создал файл PHP в своем плагине, и я добавил ссылку с классом Thickbox. Все работает отлично, но при этом создается ошибка PHP, когда для параметра WP_DEBUG установлено значение true. Глядя на исходный код WordPress, нет никакой ошибки вокруг ошибки, если я поместил PHP извне /wp-admin/ непосредственно в iframe.

Примечание: Неопределенное смещение: 1 в … / wp-includes / vars.php в строке 28

Это происходит потому, что WordPress запускает регулярное выражение на веб-адресе, чтобы извлечь имя файла, чтобы установить переменную $ pagenow, но предполагается, что файл будет в / wp-admin /. Так как это не так, совпадений нет.

Вот плагин . Файл – children.php .

Есть ли лучший способ создать пользовательский экран администратора, который может быть включен в iframe Thickbox, который проходит через файл /wp-admin/ file?

Solutions Collecting From Web of "Ошибка с пользовательским экраном администратора в iframe Thickbox"

Интересный вопрос.
Исследуя это, я нашел поток [wp-hackers] тем же Dion Hulse, который дает немного больше информации.

Во-первых, страница тестирования с простой ссылкой, которая откроет еще одну страницу администратора в толстом ящике.

 add_action('admin_menu', 'wpse_71437_admin_submenu'); function wpse_71437_admin_submenu() { add_menu_page( 'TB', '<span style="color:#e57300;">Thickbox</span>', 'edit_pages', 'open_hidden_page_in_thickbox', 'wpse_71437_submenu_page', '', // no icon 1 // create before Dashboard menu item ); } function wpse_71437_submenu_page() { wp_enqueue_style('thickbox'); wp_enqueue_script('thickbox'); ?> <div id="icon-upload" class="icon32"></div><h2>Thickbox</h2> <br><br> <a href="#" id="open-tb">Click Here</a> <script type="text/javascript"> jQuery(document).ready(function() { jQuery("#open-tb").click(function() { tb_show("", "index.php?page=video_page_hidden&TB_iframe=true"); return false; }); }); </script> <?php } 

Теперь, страница, которая будет открыта в толстом ящике. Его родительский элемент имеет значение null , поэтому он не отображается в меню. И обратный вызов – это пустая функция, если доступ напрямую не отображается.

 /** * Add a hidden and empty submenu page */ add_action('admin_menu', 'wpse_71437_admin_menu'); function wpse_71437_admin_menu() { add_submenu_page( null, // doesn't show up in the menu, attached to "index.php" (not sure why) 'Video', 'Video', 'edit_pages', 'video_page_hidden', 'wpse_71437_menu_options' ); } function wpse_71437_menu_options() { /* Print nothing */ } 

И, наконец, трюк!
Перехватите скрытую загрузку страницы и распечатайте содержимое iframe :

 /** * Intercept our hidden/empty page and print the Thickbox content */ add_action( 'load-dashboard_page_video_page_hidden', 'wpse_71437_intercept_thickbox' ); function wpse_71437_intercept_thickbox() { iframe_header(); echo '<iframe width="100%" height="380px" src="http://www.youtube.com/embed/cL6qe0b-_BA" frameborder="0" allowfullscreen></iframe>'; iframe_footer(); exit; //Die to prevent the page continueing loading and adding the admin menu's etc. }