web-dev-qa-db-fra.com

Modifier le lien de la barre d'administration

À partir de line 474 sur /wp-includes/admin-bar.php, une fonction est déclarée comme suit:

function wp_admin_bar_new_content_menu( $wp_admin_bar )

Cela génère l'élément de menu + New ainsi que tous les types de publication personnalisés pour lesquels un utilisateur dispose de la capacité edit_posts. L'option actuelle du menu supérieur, + New, prend par défaut la valeur posts, car il s'agit du premier appelé dans le tableau (je crois que c'est ainsi que cela fonctionne). J'aimerais en fait changer ce premier lien + New en quelque chose d'autre. Dans notre configuration, nous devons donner aux utilisateurs la capacité edit_posts de gérer les pages Options de champs personnalisés avancés, mais ne leur donne pas accès aux publications elles-mêmes (ce que nous devions simplement cacher dans le système de menus). Un peu funky, mais c’est plus un problème d’utilisabilité pour nous.

Mis à part tout le fouillis que j'ai dit ci-dessus, pouvez-vous modifier un lien de menu existant en fonction de l'ID de l'élément lui-même (qui est new-content dans ce cas) ou aurais-je besoin de détruire et de reconstruire le menu lui-même? Je cherche simplement à changer cet attribut href en #. Merci!

5
Zach

Je n'ai pas travaillé avec le admin-bar avant. Cependant, j'ai trouvé votre question intéressante et j'ai décidé d'y jeter un coup d'œil. Si vous ajoutez une fonction pour gérer le crochet d'action 'admin_bar_menu' et que vous définissez une priorité supérieure à 70, vous aurez accès aux nœuds raw admin_bar_menu où vous pourrez modifier les propriétés auxquelles vous tentez d'accéder. Vous trouverez ci-dessous une série d’exemples détaillés sur la manière de manipuler la barre de menus d’admin à partir du fichier functions.php de votre thème.

add_action( 'admin_bar_menu', 'customize_my_wp_admin_bar', 80 );
function customize_my_wp_admin_bar( $wp_admin_bar ) {

    //Get a reference to the new-content node to modify.
    $new_content_node = $wp_admin_bar->get_node('new-content');

    // Parent Properties for new-content node:
        //$new_content_node->id     // 'new-content'
        //$new_content_node->title  // '<span class="ab-icon"></span><span class="ab-label">New</span>'
        //$new_content_node->parent // false
        //$new_content_node->href   // 'http://www.somedomain.com/wp-admin/post-new.php'
        //$new_content_node->group  // false
        //$new_content_node->meta['title']   // 'Add New'

    //Change href
    $new_content_node->href = '#';

    //Update Node.
    $wp_admin_bar->add_node($new_content_node);

    //Remove an existing menu item.
    $wp_admin_bar->remove_menu('new-post');

    // Properties for new-post node:
        //$new_content_node->id     // 'new-post'
        //$new_content_node->title  // 'Post'
        //$new_content_node->parent // 'new-content'
        //$new_content_node->href   // 'http://www.somedomain.com/wp-admin/post-new.php'
        //$new_content_node->group  // false
        //$new_content_node->meta   // array()


    // Adding a new custom menu item that did not previously exist.
    $wp_admin_bar->add_menu( array(
               'id'    => 'new-custom-menu',
               'title' => 'Custom Menu',
               'parent'=> 'new-content',
               'href'  => '#custom-menu-link',)
            );

}

Si vous ajoutez ceci à votre fichier functions.php, notez les modifications suivantes dans la barre de menus de l'administrateur:

  1. + Le nouveau lien est maintenant '#'
  2. Le lien pour le nouveau message n'est plus dans la liste.
  3. Nouveau lien de menu ajouté appelé Lien de menu personnalisé pointant vers '# lien-de-menu-personnalisé'

Meilleures salutations,

David Carroll

8
David Carroll

Pour ajouter à David Carroll une réponse géniale (merci!), Je dois dire que pour obtenir le nom du nœud (nom du slug) du menu de la barre d’administration existant et pour pouvoir les modifier, vous devez regarder dans le code de cette nouvelle menu de contenu.

Les ul#wp-admin-bar-new-content-default li ont tous un identifiant qui se termine par leur nom. Exemple: li#wp-admin-bar-new-post ou li#wp-admin-bar-new-medianew-post ou new-media est le nom que vous pouvez utiliser dans la fonction get_node().

Pour mon but, j'ajoute pour changer le nom du lien en nouveau Post par un nom personnalisé.

//Get a reference to the new-post node to modify.
$new_post_node = $wp_admin_bar->get_node('new-post');

//Change title
$new_post_node->title = __('Interventions', 'NAME-OF-YOUR-THEME');

//Update Node.
$wp_admin_bar->add_node($new_post_node);
1
anou