Question

Y at-il un moyen d'ajouter un lien hypertexte arbitraire dans le menu admin WordPress (je veux dire le menu à gauche lorsque vous vous connectez dans le tableau de bord d'administration)? Par exemple, peut-on ajouter un lien vers Google?

Dans mon cas particulier, je voudrais ajouter une page Styleguide pour un thème Wordpress Je travaille sur pour que je puisse montrer à l'utilisateur comment les différents éléments HTML sont stylés avec le thème et de démonstration comment le style diverses choses bien .

Ceci est le code que j'ai jusqu'à présent ( Note: il est incomplet ): functions.php J'ai ajouté un nouvel élément de menu dans la Apparence section:

add_action('admin_menu', 'create_theme_style_page');

function create_theme_style_page() {
  add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}

En build_styleguide_page(), en essayant de rediriger avec header() donne une erreur ( Impossible de modifier les informations d'en-tête ).

Était-ce utile?

La solution

Salut @ Tom ,

Si je comprends bien votre question, vous ne avez pas tant de savoir comment ajouter un lien dans le menu (il semble que vous savez déjà que) mais ont besoin d'apprendre comment obtenir votre lien pour rediriger correctement, non?

Rediriger à une URL externe à partir d'un menu d'administration Point

Si oui ce que vous devez faire est de ne pas utiliser la fonction de l'élément de menu, mais à la place « crochet » WordPress assez tôt de sorte qu'il n'a rien en sortie, sauf peut-être en-têtes HTTP. Le crochet plus tôt lors de l'appel /wp-admin/themes.php semble être after_setup_theme et il semble bien fonctionner.

Utilisez "Menu Slug" So You Can Test pour dans un crochet

Mais pour l'obtenir à nous travaillons d'abord besoin de modifier votre appel à add_theme_page dans le crochet de admin_menu / votre fonction create_theme_style_page(). Nous avons laissé tomber le cinquième paramètre (la fonction à appeler à mettre en œuvre l'option admin) parce que nous ne avons pas besoin, et changé le quatrième paramètre ( « slug menu » ) pour être themes.php?goto=build-styleguide-page.

Bien que nous aurions pu choisir presque littéralement quelque chose pour le quatrième paramètre, étant donné que nous allons rediriger je routés sur la même page (themes.php) que d'autres options d'apparence de cohérence. Je viens aussi arbitrairement venu avec le nom goto parce que WordPress ne l'utilise pas et il semble faire pour ce 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, nous nous sommes débarrassés de votre fonction build_styleguide_page() parce que nous ne avons pas besoin pour cette solution.

Redirect dans le crochet au plus tôt pour themes.php: after_setup_theme

Comme notre dernier morceau de code, nous appliquons notre crochet after_setup_theme dans notre fonction redirect_from_admin_menu(). Nous l'avons test pour voir si la page en cours est themes.php et d'assurer un paramètre d'URL de goto a été adoptée sur l'URL. Ensuite, il teste la valeur de goto en utilisant une instruction switch / case pour voir si elle a une valeur de 'build-styleguide-page'; s'il redirige votre exemple hypothétique indiqué Google sinon nous redirigeons tout juste au 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;
  }
}

Notes:

  1. J'ai choisi d'utiliser l'instruction switch / case dans la fonction crochet after_setup_theme / redirect_from_admin_menu() afin qu'il serait plus facile d'ajouter des redirections goto supplémentaires si vous avez besoin; il suffit d'ajouter plus de déclarations de cas.

  2. les fonctions de wp_redirect() et wp_safe_redirect() ne se terminent pas réellement; vous devez émettre une déclaration explicite de sortie pour obtenir WordPress d'arrêter et de ne pas surcharger votre redirection.

Hope this helps!

Autres conseils

Si vous ajoutez votre article dans le menu en ajoutant au tableau de $submenu directement vous éviterez la nécessité de faire la redirection et être en mesure d'utiliser une URL hors site complète le lien de menu (je fais moi-même).

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

index.php représente la clé / lien du menu parent, donc dans l'exemple que je suis fondamentalement d'ajouter un élément à la Tableau de bord Menu ..

Bien sûr, il est pas tout à fait aussi jolie que l'utilisation des fonctions de add_{type}_page, mais il ne fonctionne autour de WordPress les empêche de fait les URL hors site dans les liens de menu admin ..

J'utilise quelque chose de similaire à ajouter mes divers hôtes virtuels dans le menu, donc je peux passer à d'autres installations directement depuis le menu d'administration (fait avec un script, mais utilise essentiellement une version glorifiée du code ci-dessus).

NOTE:. Si vous décidez d'utiliser le code, juste attention à ne pas attribuer une clé de leur utilisation (la touche de tableau 500 dans le code exemple)

TIP:. Vous pouvez réellement utiliser des valeurs négatives dans les touches de menu, donc vous pouvez vous forcer les éléments de menu à s'asseoir avant que l'un des éléments de WordPress natif

J'ai atteint même avec ceci:

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

Ce que vous faites ici est que vous ajoutez élément de menu et de définir limace, puis sur « admin_init » vous vérifier si limace existe et redirection vers l'emplacement souhaité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top