функция «add_submenu_page в wordpress подключается к домашней странице вместо страницы подменю

#php #wordpress #plugins #submenu

Вопрос:

примечание: обновил код с помощью предложенного кода

Я создаю меню и подменю в администраторе wordpress для плагина. Пункт меню главного меню работает нормально и переходит в нужный php-файл(страницу). но подменю показывает текст меню, но при нажатии на него оно перенаправляется на страницу 404, и в моем случае оно перейдет на домашнюю страницу. Я потратил несколько часов на код, и, похоже, я что-то контролирую. Вот код:

 class BbtbPlugin{

   public function __construct(){
      add_action( 'init', array( $this,'bbtb_admin_menu' ));
   }
   public function bbtb_admin_menu() {
     add_menu_page(
        'Bricks by the Bay conventions',
        'BBTB conventions',
        'manage_options',
        'bbtb_conventions',
        'all_bbtb_conventions',
        'dashicons-media-spreadsheet',
        11
      );
      add_submenu_page(
        'bbtb_conventions',
        'Settings',
        'Settings',
        'manage_options',
        'bbtb_settings',
         function () { // anonymous callback function
            include "includes/setting_page.php";
        }
       );
       function all_bbtb_conventions() {
        include "includes/add_convention.php";
       }
    }
  }
 

Поэтому я проверил, работает ли функция подменю, заменив в add_menu_page «all_bbtb_конвенции» на «bbtb_settings». Тогда функция работает.

Так что в настройках add_submenu_page должно быть что-то, чего мне не хватает

Ответ №1:

Возможно, это связано с тем, что вы используете одно и то же имя слизняка в имени функции обратного вызова, попробуйте изменить его.

Вы также можете сделать следующее:

 add_submenu_page(
    'bbtb_conventions',
    'Settings',
    'Settings',
    'manage_options',
    'bbtb_settings',
    'bbtb_settings_callback'
);

function bbtb_settings_callback() {
    include "includes/setting_page.php";
}
 

Вы даже можете опустить функцию обратного вызова с помощью анонимной функции.

 add_submenu_page(
    'bbtb_conventions',
    'Settings',
    'Settings',
    'manage_options',
    'bbtb_settings',
    function () { // anonymous callback function
        include "includes/setting_page.php";
    }
);
 

Также нет необходимости добавлять условие для проверки емкости manage_options, потому что для чего-то емкость задана в параметре 3 в add_menu_page() и в параметре 4 в add_submenu_page()

Надеюсь, я вам помог, приветствую вас!

Комментарии:

1. Спасибо вам за информацию. Я новичок во всем этом. Я попробовал оба предложения, но возникает одна и та же проблема.

2. @joam777 Какой крючок действий вы используете для создания меню?

Ответ №2:

Понял, что мне нужно заменить add_action( 'init', array( $this,'bbtb_admin_menu' )); заменить init на admin_menu . Теперь это хорошо работает