#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
. Теперь это хорошо работает