web-dev-qa-db-fra.com

Obtenir les identifiants de page des éléments de navigation

J'essaie d'obtenir tous les identifiants de ma navigation et de les convertir en chaîne afin de pouvoir les utiliser avec wp_query pour obtenir les pages uniquement répertoriées dans le navigateur. Le code pour obtenir les identifiants:

$menu_name = 'primary';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] )) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
    $menu_items = wp_get_nav_menu_items($menu->term_id);
}

foreach ( $menu_items as $menu_item ) {
    $numbers[] = $menu_item->ID;
}

$number = implode(',',$numbers);

Mais il renvoie les mauvais numéros. Lorsque je vais dans la zone d'administration et que je passe la souris sur les pages, le numéro qui apparaît dans la barre d'adresse en bas de l'écran ne correspond pas. Qu'est-ce que je fais mal?

10
Jamie

Les éléments de menu sont stockés dans la table posts avec un post_type de nav_menu_item. Par conséquent, ce que vous retournez est l’ID de l’élément de menu lui-même, et non ce qu’il indique.

L'ID de page/publication auquel l'élément de menu fait référence est stocké dans la table postmeta, avec un post_id qui correspond à l'élément de menu ID et meta_key = _menu_item_object_id. Le moyen le plus simple d’obtenir le meta_value (c’est-à-dire la page pointée par l’élément de menu) consiste à utiliser quelque chose comme ceci:

$numbers[] = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );

12
anu