J'ai la fonction suivante pour générer un menu personnalisé au format sélectionné pour un design réactif sur lequel je travaille.
Cela fonctionne exactement comme je le souhaite, à part cela, j'aurais besoin d'exclure des éléments de sous-menu. Pour le moment, il comprend tous les niveaux.
Est-ce que quelqu'un sait comment je peux dire à wp_get_nav_menu_items
d'afficher uniquement les éléments de menu de niveau supérieur, s'il vous plaît?
function jeMobileMenu( $args ) {
// Set up defaults arguments
$defaults = array (
'menuSlug' => '',
'placeholder' => 'Menu',
'prefix' => ' » ',
'navID' => 'mobileNav',
'navClass' => ''
);
// Parse incomming $args into an array and merge it with $defaults
$args = wp_parse_args( $args, $defaults );
//Declare each item in $args as its own variable i.e. $menuSlug, $placeholder
extract( $args, EXTR_SKIP );
// If no menu slug has been passed then lets bail
if ( empty($menuSlug) )
return;
// If the menu slug that has been passed doesn't correspond to an exisiting menu then lets bail
if ( !has_nav_menu( $menuSlug ) )
return;
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menuSlug ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
// Wrap the select in a nav element with passed id and classes
$menu_output = '<nav id="' . $navID . '" class="' . $navClass . '">';
$menu_output .= '<select id="menu-' . $menuSlug . '" onchange="window.open(this.options[this.selectedIndex].value,\'_top\')">';
// Add placeholder and home link
$menu_output .= '<option value="">' . $placeholder . '</option>';
$menu_output .= '<option value="' . home_url( '/' ) . '">' . $prefix . 'Home</option>';
// Now loop through all the menu items and create them as options in the select list
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}
$menu_output .= '</select>';
$menu_output .= '</nav>';
echo $menu_output;
}
Je pense que je l'ai fait !!
J'ai fait un print_r sur chaque $ menu_item et j'ai vu qu'il y avait une clé de tableau appelée menu_item_parent.
Alors j'ai changé ça:
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}
pour ça:
foreach ( (array) $menu_items as $key => $menu_item ) {
if ( $menu_item->menu_item_parent == 0 ) :
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
endif;
}
Maintenant, il ne tirera que les éléments de menu sans parent d'élément de menu.