Hallo @Tom ,
Wenn ich Ihre Frage richtig verstehe, müssen Sie nicht so sehr wissen, wie Sie einen Link zum Menü hinzufügen (anscheinend wissen Sie das bereits), sondern müssen lernen, wie Sie Ihren Link dazu bringen, richtig umzuleiten, oder?
Umleiten zu einer externen URL von einem Admin-Menüelement
Wenn ja, müssen Sie nicht den Menüpunkt function verwenden, sondern WordPress so früh "einbinden" , dass es nichts außer möglicherweise HTTP-Headern ausgibt. Der früheste Haken beim Anrufen /wp-admin/themes.php
scheint zu sein after_setup_theme
und es scheint gut zu funktionieren.
Verwenden Sie einen "Menu Slug", damit Sie ihn in einem Hook testen können
Aber um es zum Laufen zu bringen, müssen wir zuerst Ihren Anruf add_theme_page
in den admin_menu
Hook / Ihre create_theme_style_page()
Funktion ändern . Wir haben den fünften Parameter (die Funktion, die aufgerufen werden muss, um die Admin-Option zu implementieren) gelöscht, weil wir ihn nicht benötigen, und den vierten Parameter (den "Menü-Slug" ) geändert themes.php?goto=build-styleguide-page
.
Obwohl wir für den vierten Parameter buchstäblich alles hätten wählen können, habe ich, da wir umleiten werden, aus Gründen der themes.php
Konsistenz auf dieselbe Seite ( ) weitergeleitet wie andere Darstellungsoptionen. Ich habe mir den Namen auch nur willkürlich goto
ausgedacht, weil WordPress ihn nicht verwendet und es dafür Sinn zu machen scheint.
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'
);
}
Übrigens, wir haben Ihre build_styleguide_page()
Funktion aufgegeben, weil wir sie für diese Lösung nicht benötigen.
Weiterleiten im frühesten Hook für themes.php
:after_setup_theme
Als letzten Code implementieren wir unseren after_setup_theme
Hook in unsere redirect_from_admin_menu()
Funktion. Wir haben es getestet, um festzustellen, ob die aktuelle Seite ist themes.php
und um sicherzustellen, dass ein URL-Parameter von goto
an die URL übergeben wurde. Dann testet es den Wert der goto
Verwendung einer switch
/ case
-Anweisung, um festzustellen, ob sie den Wert hat 'build-styleguide-page'
; Wenn dies der Fall ist, werden Sie zu Ihrer angegebenen Hypothese weitergeleitet, z. B. zu Google. Andernfalls werden Sie einfach zum Admin-Dashboard zurückgeleitet:
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;
}
}
Anmerkungen:
Ich habe die Anweisung switch
/ case
in der Funktion after_setup_theme
hook / redirect_from_admin_menu()
verwendet, damit Sie bei Bedarf einfacher zusätzliche goto
Weiterleitungen hinzufügen können . Fügen Sie einfach weitere case-Anweisungen hinzu.
Die Funktionen wp_redirect()
und wp_safe_redirect()
werden nicht beendet. Sie müssen explizit eine exit-Anweisung ausgeben, damit WordPress die Weiterleitung stoppt und nicht überschreibt.
Hoffe das hilft!
'-5'
und nicht-5
, sonst gilt der Schlüssel als ungültig (glaube ich) .. (negative Zeichenfolgen funktionieren jedoch, wenn ich mich nicht irre) ..array_push()
Menüelemente angehängt habe, um zu vermeiden, dass sie mit anderen Plugins kollidieren.global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =
Ich habe dasselbe damit erreicht:
Sie fügen hier einen Menüeintrag hinzu und definieren slug. Dann überprüfen Sie auf 'admin_init', ob slug vorhanden ist, und leiten Sie an den gewünschten Ort weiter.
quelle