Salut @ Tom ,
Si je comprends bien votre question, vous n'avez pas tellement besoin de savoir comment ajouter un lien au menu (il semble que vous le sachiez déjà), mais au lieu de cela, vous devez apprendre à faire rediriger votre lien correctement, non?
Redirection vers une URL externe à partir d'un élément du menu Admin
Si c'est le cas, ce que vous devez faire est de ne pas utiliser la fonction d'élément de menu, mais de "connecter" WordPress suffisamment tôt pour qu'il ne produise rien, sauf éventuellement des en-têtes HTTP. Le premier crochet lors de l'appel /wp-admin/themes.php
semble être after_setup_theme
et il semble bien fonctionner.
Utilisez un "Menu Slug" afin que vous puissiez le tester dans un crochet
Mais pour le faire fonctionner, nous devons d'abord modifier votre appel add_theme_page
dans le admin_menu
hook / votre create_theme_style_page()
fonction. Nous avons laissé tomber le cinquième paramètre (la fonction à appeler pour implémenter l'option admin) parce que nous n'en avons pas besoin, et avons changé le quatrième paramètre (le "slug de menu" ) pour être themes.php?goto=build-styleguide-page
.
Bien que nous aurions pu choisir pratiquement n'importe quoi pour le quatrième paramètre, étant donné que nous allons rediriger j'ai routé vers la même page ( themes.php
) que d'autres options d'apparence pour la cohérence. J'ai aussi juste arbitrairement trouvé le nom goto
parce que WordPress ne l'utilise pas et cela semble logique.
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, nous nous sommes débarrassés de votre build_styleguide_page()
fonction car nous n'en avons pas besoin pour cette solution.
Rediriger dans le premier crochet pour themes.php
:after_setup_theme
Comme notre dernier morceau de code, nous implémentons notre after_setup_theme
hook dans notre redirect_from_admin_menu()
fonction. Nous l'avons testé pour voir si la page actuelle est themes.php
et pour nous assurer qu'un paramètre d'URL a goto
été transmis à l'URL. Ensuite, il teste la valeur de l' goto
utilisation d'une instruction switch
/ case
pour voir si elle a une valeur de 'build-styleguide-page'
; si c'est le cas, il redirige vers votre hypothétique déclarée, par exemple Google, sinon nous redirigeons simplement vers le tableau de bord d'administration:
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;
}
}
Remarques:
J'ai choisi d'utiliser l' instruction switch
/ case
dans la fonction after_setup_theme
hook / redirect_from_admin_menu()
afin qu'il soit plus facile d'ajouter des goto
redirections supplémentaires si vous en avez besoin; ajoutez simplement plus de déclarations de cas.
les fonctions wp_redirect()
et wp_safe_redirect()
ne se terminent pas réellement; vous devez explicitement émettre une instruction de sortie pour que WordPress s'arrête et ne remplace pas votre redirection.
J'espère que cela t'aides!
'-5'
et non-5
, sinon la clé est considérée comme invalide (je pense) .. (les chaînes négatives fonctionnent bien, si je ne me trompe pas) ..array_push()
d'ajouter les éléments de menu pour éviter d'entrer en collision avec d'autres plugins.global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] =
etc.J'ai réalisé la même chose avec ceci:
Ce que vous faites ici est d'ajouter un élément de menu et de définir un slug, puis sur 'admin_init', vous vérifiez si le slug existe et vous redirigez vers l'emplacement souhaité.
la source