web-dev-qa-db-fra.com

Vérifier si la page est dans un certain menu

J'ai un client qui voulait deux "menus principaux" et nous devions afficher par programme le menu contenant la page actuelle. Comment puis je faire ça?

Ex: Nous sommes sur la page "À propos". Déterminez lequel des deux menus contient la page "À propos de" et affichez-le.

7
mrwweb

Voici la fonction que j'ai écrite pour comprendre cela. Vous lui donnez un slug/nom/ID de menu et un ID de page/page. Il renvoie TRUE si cette publication/page se trouve dans le menu spécifié et FALSE sinon. Ensuite, il suffisait simplement de faire une déclaration rapide if/else pour vérifier les deux menus et afficher le bon.

/**
 * Check if post is in a menu
 *
 * @param $menu menu name, id, or slug
 * @param $object_id int post object id of page
 * @return bool true if object is in menu
 */
function cms_is_in_menu( $menu = null, $object_id = null ) {

    // get menu object
    $menu_object = wp_get_nav_menu_items( esc_attr( $menu ) );

    // stop if there isn't a menu
    if( ! $menu_object )
        return false;

    // get the object_id field out of the menu object
    $menu_items = wp_list_pluck( $menu_object, 'object_id' );

    // use the current post if object_id is not specified
    if( !$object_id ) {
        global $post;
        $object_id = get_queried_object_id();
    }

    // test if the specified page is in the menu or not. return true or false.
    return in_array( (int) $object_id, $menu_items );

}

Exemple d'utilisation:

if( cms_is_in_menu( 'main-menu' ) ) {
    // do something like wp_nav_menu( $args );
}
16
mrwweb