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.
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 );
}