Плагин - страница меню администратора неработающая ссылка

Я работаю над плагином. Я создал новый пункт меню внутри моего functions.php . Основная идея будет состоять в том, чтобы иметь меню по умолчанию, которое будет родительским для нескольких, маленьких и разных плагинов.

У меня почти все на месте, но у меня возникает проблема, когда я нажимаю на подменю плагина. entry.

URL не работает, и вместо того, чтобы перейти на нужную страницу администратора

http://localhost/wp-admin/admin.php?page=my_page

, он переходит на страницу внешнего интерфейса, которая недоступна, и переходит на 404.The Неработающий URL выглядит следующим образом:

http://localhost/wp-admin/my_page

Как видите, admin.php? page = отсутствует во второй записи.

Я исследовал немного, и похоже, что это исправлено, если я инициализирую меню из самого плагина, а не из файла functions.php .

Некоторый код, чтобы доказать это:

РАБОЧАЯ

public function add_menu_item(){        $page_reports = add_menu_page(__('Menu Page', 'menu-page'), __('Menu Page', 'menu-page'), 'read', $this->parent->_token . '_settings', null, null, '2.1');        add_submenu_page('menu-page', __('Report', 'menu-page'), __('Report', 'menu-page'), 'read', $this->parent->_token . '_REPORT', array($this, 'IncludePluginPage'));}public function IncludePluginPage(){    include("../includes/index.php");}

НЕ РАБОТАЮЩАЯ

public function add_menu_item(){        //$page_reports = add_menu_page(__('Menu Page', 'menu-page'), __('Menu Page', 'menu-page'), 'read', $this->parent->_token . '_settings', null, null, '2.1');        add_submenu_page('menu-page', __('Report', 'menu-page'), __('Report', 'menu-page'), 'read', $this->parent->_token . '_REPORT', array($this, 'IncludePluginPage'));}public function IncludePluginPage(){    include("../includes/index.php");}//Code from functions.php to generate the menu entryfunction custom_admin_menu(){    add_menu_page('Menu Page', 'Menu Page', 'read', 'menu-page', null, null, '2.1');}

В обоих случаях меню отображается правильно, но когда меню инициализируется из functions.php , URL подменю не работает.

Что мне здесь не хватает?

Пожалуйста, не стесняйтесь спрашивать больше кода, Я не был уверен, что Добавьте сюда, чтобы получить как можно больше помощи.

Если вам интересно, я начал с этого шаблона здесь: https://github.com/hlashbrooke/WordPress-Plugin-Template

Ответы и комментарии:

Меню генерируется функцией _wp_menu_output. Если вы посмотрите на место, где сгенерированы ссылки (в настоящее время строки 158-162 и 170-174), вы увидите, что admin.php? Page = part при определенных обстоятельствах опускается. Одним из них является пустой $ menu_hook.
Переменная menu_hook заполняется вызовом get_plugin_page_hook, который вернется пустым, если к крючку не привязано никаких действий. Это означает: нет функции обратного вызова, определенной для создания страницы.
Теперь давайте посмотрим на порядок подключения: плагины загружаются перед темами, поэтому, если вы генерируете подменю перед родительским меню (что вы делаете, если инициализируете родительское меню в файле functions.php темы), может возникнуть проблема в строке 190- 192 из add_submenu_page: в этой точке может быть невозможно привязать действие к хуку, потому что родительская страница не определена.
Отказ от ответственности: я проанализировал код от макушки головы, поэтому, возможно, я ошибся там.
В любом случае, если вы настаиваете на инициализации чего-либо из вашего functions.php, не пытайтесь инициализировать подменю в вашем плагине. Вместо этого просто определите функцию в вашем плагине и вызовите ее также из темы.
Создан 14-06-2018 09:00 cjbj10.7k102866