Cześć @ Tom ,
Jeśli dobrze rozumiem twoje pytanie, nie musisz tak bardzo wiedzieć, jak dodać link do menu (wydaje się, że już to wiesz), ale zamiast tego musisz nauczyć się, jak poprawnie przekierować link, prawda?
Przekierowanie na zewnętrzny adres URL z pozycji menu administratora
Jeśli tak, to nie należy używać funkcji pozycji menu, ale zamiast tego „zaczepić” WordPressa wystarczająco wcześnie, aby nie wyprowadzał niczego poza możliwymi nagłówkami HTTP. Najwcześniejszy haczyk podczas połączenia /wp-admin/themes.php
wydaje się być after_setup_theme
i wydaje się działać dobrze.
Użyj „Menu Slug”, aby przetestować go w haku
Ale żeby zmusić go do pracy musimy najpierw zmodyfikować swoje wywołanie add_theme_page
w admin_menu
hak / swojej create_theme_style_page()
funkcji. Porzuciliśmy piąty parametr (funkcję do wywołania w celu zaimplementowania opcji administratora), ponieważ go nie potrzebujemy, i zmieniliśmy czwarty parametr ( „ślimak menu” ) na themes.php?goto=build-styleguide-page
.
Chociaż moglibyśmy wybrać prawie dosłownie wszystko dla czwartego parametru, biorąc pod uwagę, że przekierujemy I skierowany do tej samej strony ( themes.php
), co inne opcje wyglądu dla spójności. Po prostu arbitralnie wymyśliłem nazwę, goto
ponieważ WordPress jej nie używa i wydaje się to mieć sens.
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'
);
}
BTW, pozbyliśmy się twojej build_styleguide_page()
funkcji, ponieważ nie potrzebujemy jej do tego rozwiązania.
Przekieruj w najwcześniejszym haku dla themes.php
:after_setup_theme
Jako nasz ostatni fragment kodu implementujemy nasz after_setup_theme
hook w naszej redirect_from_admin_menu()
funkcji. Mamy test, aby sprawdzić, czy bieżąca strona jest themes.php
i upewnić się, że parametr adresu URL goto
został przekazany na adres URL. Następnie sprawdza wartość goto
za pomocą instrukcji switch
/ case
, aby sprawdzić, czy ma wartość 'build-styleguide-page'
; jeśli tak, przekierowuje do Twojej hipotetycznej strony, np. Google, w przeciwnym razie po prostu przekierowujemy z powrotem do pulpitu administratora:
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;
}
}
Uwagi:
Zdecydowałem się użyć instrukcji switch
/ case
w funkcji after_setup_theme
hook /, redirect_from_admin_menu()
aby łatwiej było dodawać dodatkowe goto
przekierowania, jeśli zajdzie taka potrzeba; po prostu dodaj więcej instrukcji case.
wp_redirect()
i wp_safe_redirect()
funkcje nie faktycznie rozwiązać; musisz jawnie wydać instrukcję wyjścia, aby WordPress się zatrzymał i nie zastąpił przekierowania.
Mam nadzieję że to pomoże!
'-5'
i nie-5
, w przeciwnym razie klucz zostanie uznany za nieważny (tak mi się wydaje) .. (choć ciągi ujemne działają, jeśli się nie mylę) ..array_push()
dodawałem elementy menu, aby uniknąć kolizji z innymi wtyczkami.global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =
itp.Osiągnąłem to samo z tym:
Tutaj dodajesz pozycję menu i definiujesz ślimak, a następnie w „admin_init” sprawdzasz, czy ślimak istnieje i przekierowujesz do pożądanej lokalizacji.
źródło