Привет @ Том ,
Если я правильно понимаю ваш вопрос, вам не нужно знать, как добавить ссылку в меню (кажется, вы уже это знаете), а вместо этого нужно научиться правильно перенаправлять ссылку, верно?
Перенаправление на внешний URL из пункта меню администратора
Если это так, то вам нужно не использовать функцию пункта меню, а вместо этого «подключить» WordPress достаточно рано, чтобы он ничего не выводил, кроме, возможно, заголовков HTTP. Самым ранним хуком при вызове /wp-admin/themes.php
оказывается after_setup_theme
и он работает хорошо.
Используйте «Menu Slug», чтобы вы могли проверить его в Hook
Но чтобы заставить его работать, нам сначала нужно изменить ваш вызов add_theme_page
в admin_menu
хуке / вашей create_theme_style_page()
функции. Мы удалили пятый параметр (функция, которую нужно вызвать для реализации опции администратора), потому что он нам не нужен, и изменили четвертый параметр ( «слаг меню» ), чтобы он был themes.php?goto=build-styleguide-page
.
Хотя для четвертого параметра мы могли бы выбрать буквально что угодно, учитывая, что мы собираемся перенаправить, я перенаправил на ту же страницу ( themes.php
), что и другие варианты внешнего вида для согласованности. Я также просто произвольно придумал имя, goto
потому что WordPress не использует его, и, похоже, в этом есть смысл.
add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
add_theme_page(
'Theme Styleguide',
'Theme Styleguide',
'administrator',
'themes.php?goto=build-styleguide-page'
);
}
Кстати, мы избавились от вашей build_styleguide_page()
функции, потому что она нам не нужна для этого решения.
Перенаправление в самый ранний Hook для themes.php
:after_setup_theme
В качестве последнего фрагмента кода мы реализуем наш after_setup_theme
хук в нашей redirect_from_admin_menu()
функции. У нас есть тест, чтобы увидеть, является ли текущая страница, themes.php
и убедиться, что параметр URL goto
был передан в URL. Затем он проверяет значение goto
использования оператора switch
/, case
чтобы увидеть, имеет ли оно значение 'build-styleguide-page'
; если это так, он перенаправляет на ваш гипотетический пример, например Google, в противном случае мы просто перенаправляем обратно на панель администратора:
add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
global $pagenow;
if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
switch ($_GET['goto']) {
case 'build-styleguide-page':
wp_redirect("http://www.google.com");
break;
default:
wp_safe_redirect('/wp-admin/');
break;
}
exit;
}
}
Примечания:
Я решил использовать оператор switch
/ case
в after_setup_theme
хуке / redirect_from_admin_menu()
функции, чтобы было проще добавлять дополнительные goto
перенаправления, если это необходимо; просто добавьте больше случаев.
wp_redirect()
и wp_safe_redirect()
функции фактически не прекращается; вам нужно явно выполнить оператор выхода, чтобы WordPress остановился и не переопределял ваше перенаправление.
Надеюсь это поможет!
'-5'
и нет-5
, иначе ключ считается недействительным (я думаю) .. (хотя отрицательные строки работают, если я не ошибаюсь) ..array_push()
либо элементы в какие меню, я подумал, что просто добавлю, что я использовал для добавления пунктов меню, чтобы избежать столкновения с любыми другими плагинами.global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =
и т. Д.Я достиг того же с этим:
Здесь вы добавляете пункт меню и определяете слаг, затем в 'admin_init' вы проверяете, существует ли слаг, и перенаправляете в нужное место.
источник