web-dev-qa-db-fra.com

comment ajouter uniquement un menu d'administration de niveau supérieur sans créer de sous-niveau

Voici l'extrait de code:

    add_action( 'admin_menu', 'travel_site' );

function travel_site(){
    add_menu_page( 'Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page' );
    add_submenu_page("travel-site-menu","View Travel Requests","View Travel Requests","manage_options","ts-view-travel-requests","ts_admin_vtr_page");
}

function ts_admin_main_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing main travel site menu page</p>';
    echo '</div>';
}

function ts_admin_vtr_page(){
    echo '<div class="wrap">';
    echo    '<p>Testing view travel requests</p>';
    echo '</div>';
}

Le problème est que lorsque vous ajoutez le sous-menu, le nom du menu de niveau supérieur ("Travel Site") se crée lui-même en tant que menu de sous-niveau. Voir l'image: enter image description here

En gros, je ne veux pas du sous-menu "Site de voyage" dans le menu principal "Site de voyage", comment puis-je supprimer le sous-menu "Site de voyage"?

2
dave

Pour ce faire, vous pouvez ajouter un élément de sous-niveau avec le même slug de menu que le niveau supérieur, tout en modifiant le titre de l'élément de sous-menu. Cela évite l'apparence d'éléments de menu en double, même si la destination du niveau supérieur et le premier élément de menu sont les mêmes.

Vous devez avoir au moins deux éléments de sous-menu. L'un d'entre eux sera une destination dupliquée en tant qu'élément de menu de niveau supérieur.

Par exemple:

add_action( 'admin_menu', 'add_travel_menu' );
function add_travel_menu() {
        add_menu_page('Travel Site Menu', 'Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'Travel Site', 'View Travel Site', 'manage_options', 'travel-site-menu', 'ts_admin_main_page');
        add_submenu_page('travel-site-menu', 'View Travel Requests', 'View Travel Requests', 'manage_options', 'ts-view-travel-requests', 'ts_admin_main_page');
}
function ts_admin_main_page() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    echo '<div class="wrap">';
    echo '<p>Here is where the form would go if I actually had options.</p>';
    echo '</div>';
}

Cela créerait le menu suivant:

  • Travel Site -> travel-site-menu
    • Voir le site de voyage -> travel-site-menu
    • Afficher les demandes de voyage -> ts-view-travel-request

enter image description here

La fonction ts_admin_main_page crée en fait la page qui servira de "Site de voyage" et "Afficher le site de voyage". Vous devez créer la fonction similaire "ts_admin_vtr_page" qui créera la destination de sous-page pour "Afficher les demandes de voyage".

1
dbmpls

Il n'y a pas vraiment de bonne façon de faire ça. Commander la fonction _wp_menu_output . C'est là que tout le travail est effectué pour la sortie du menu. Voir ce paramètre $submenu_as_parent et comment il est utilisé ? Définir ce paramètre sur false produit le résultat souhaité, mais il n’existe aucun filtre pour que cela fonctionne réellement. Il existe un ticket ouvert à ce sujet, mais aucune mesure n'a été prise depuis plus d'un an. Sans éditer un fichier core (mauvaise idée), vous n’allez pas résoudre ce problème sans un tampon de sortie et une solution très fragile.

3
chrisguitarguy