web-dev-qa-db-fra.com

Comment supprimer des éléments du menu + nouveau menu administrateur?

Je voudrais limiter le menu + New admin pour afficher uniquement le sous-menu Event ("Veranstaltung"). Fondamentalement, les utilisateurs sont autorisés à créer d'autres éléments, mais pas à partir de ce menu + Nouveau.

 +New Admin Menu 

Je l'ai déjà essayé avec le plugin "Adminimize" car cela peut supprimer les autres éléments, mais il laissera le nouveau lien multimédia intact lorsque vous cliquerez directement sur "+ Nouveau".

 +New Admin Menu - link still there 

J'ai déjà ajouté une autre logique pour supprimer des éléments du menu de gauche, tels que:

function remove_menus() {

    remove_menu_page('edit.php?post_type=mdocs-posts');
 }
 add_action('admin_menu', 'remove_menus');

Mais je n'arrive pas à savoir comment modifier le + Nouveau. Des allusions?

Je vous remercie!

1
sailingthoms

Pour tout cacher (menu et sous-menu) -

function wpse_260669_remove_new_content(){
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'new-content' );
}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_remove_new_content' );

Pour masquer des éléments de menu/sous-menu spécifiques -

function wpse_260669_remove_new_content_items(){
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'new-post' ); // hides post CPT
    $wp_admin_bar->remove_menu( 'new-product' ); // hides product CPT
    $wp_admin_bar->remove_menu( 'new-page' ); // hides page CPT
    $wp_admin_bar->remove_menu( 'new-media' ); // hides media
}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_remove_new_content_items' );

Donc, la règle de base est-

function your_boo_bar_function() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu( 'your-unique-menu-id' );
}
add_action( 'wp_before_admin_bar_render', 'your_boo_bar_function' );

Ajouter un nouveau menu-

function wpse_260669_add_menu(){
    global $wp_admin_bar;
    $wp_admin_bar->add_node(
        array(
            'id'        => 'google-menu',
            'title'     => 'Google',
            'href'      => 'http://google.com',
            'parent'    => 'new-content', // so, it'll be set as a child of 'new-content'. remove this to use this as a parent menu
            'meta'      => array( 'class' => 'my-custom-class' ),
        )
    );

}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_add_menu' );

Met à jour un menu existant -

Si vous souhaitez mettre à jour un élément de menu existant, ajoutez simplement un nouvel élément à l'aide de l'ID du menu souhaité.

Pour mettre à jour + Nouveau ('contenu-nouveau'), utilisez ce code-

function wpse_260669_update_menu(){
    global $wp_admin_bar;
    $wp_admin_bar->add_node(
        array(
            'id'    => 'new-content', // id of an existing menu
            'href'  => 'your_new_url_goes_here', // set new URL
        )
    );

}
add_action( 'wp_before_admin_bar_render', 'wpse_260669_update_menu' );

Comment obtenir un ID de menu -

Le moyen le plus simple est d'inspecter l'élément avec Firebug et de prendre l'identifiant. Voir cette capture d'écran-

 How to get menu ID 

Accédez à l'élément de menu souhaité et obtenez la chaîne en regard de wp-admin-bar-

6
mukto90

Pour donner suite à la réponse de @ mukto90, ce qui suit ajoute à la barre d'outils un menu répertoriant l'ID de noeud (ce que vous devez passer à $wp_admin_bar->remove_node()) de tous les nœuds autres de la barre d'outils.

add_action ('wp_before_admin_bar_render', 'add_all_node_ids_to_toolbar'), 99999) ;

function
add_all_node_ids_to_toolbar ()
{
    global $wp_admin_bar ;

    if (!current_user_can ('manage_options')) {
        // allow only "admins" to have our menu
        return ;
        }

    $all_toolbar_nodes = $wp_admin_bar->get_nodes () ;

    if (empty ($all_toolbar_nodes)) {
        // there are no top-level nodes, so bail
        return ;
        }

    // add our top-level menu to the toolbar
    $our_node_id = 'node_ids' ;
    $args = array (
        'id' => $our_node_id,
        'title' => "Node ID's",
        ) ;
    $wp_admin_bar->add_node ($args) ;

    // add all current Toolbar items to their parent node or to our top-level menu
    foreach ($all_toolbar_nodes as $node) {
        $args = array (
            'id' => "{$our_node_id}_{$node->id}", // prefix id with "node_id_" to make it a unique id
            'title' => $node->id,
            ) ;

        if (!(isset ($node->parent) && $node->parent)) {
            // the node has no parent, so add it to our top-level menu
            $args['parent'] = $our_node_id ;
            }
        else {
            // the node has a parent, so add it as a child to appropriate node in our menu
            $args['parent'] = "{$our_node_id}_{$node->parent}" ;
            }

        $wp_admin_bar->add_node ($args) ;
        }

    return ;
}

Une autre approche consiste à tirer parti de la propriété show_in_admin_bar des types de publication. Lorsque les types de publication sont enregistrés (types de publication intégrés et types personnalisés), ils déclarent s’ils "veulent" être inclus dans le menu "Nouveau" de la barre d’outils.

$args = array (
    'show_in_admin_bar' => true|false,
    ) ;
register_post_type ('post_type_name', $args) ;

Donc, pour les CPT que vous enregistrez, si vous ne voulez pas qu’ils apparaissent dans le menu "Nouveau" de la barre d’outils, définissez simplement 'show_in_admin_bar' => false,. Si show_in_admin_bar n'est pas spécifié dans $args, la valeur par défaut est show_in_menu. Voir register_post_type () pour plus de détails.

Qu'en est-il des éléments intégrés Vous pouvez supprimer ceux que vous ne voulez pas avec ce qui suit:

add_action ('wp_before_admin_bar_render', 'remove_from_toolbar_new') ;

function
remove_from_toolbar_new ()
{
    $allow_in_toolbar_new = array (
        'page', // if you don't want any built-ins, just make this an empty array
        ) ;

    $args = array (
        '_builtin' => true,
        'show_in_admin_bar' => true,
        ) ;
    foreach (get_post_types ($args, 'objects') as $post_type) {
        if (in_array ($post_type->name, $allow_in_toolbar_new)) {
            continue ;
            }

        $post_type->set_props (array ('show_in_admin_bar' => false)) ;
        }

    return ;
}

Voir get_post_types () et WP_Post_Type :: set_props () pour plus de détails.

Autant que je sache, le seul moyen de supprimer l'élément "Utilisateurs" du menu "Nouveau" de la barre d'outils consiste à utiliser la technique mentionnée par @ mukto90.