Comme je fais un site Web d'une page. Voici la question que j'ai posée plus tôt:
Appel de pages spécifiques avec la requête wp Partie II
Comme j'appelle toutes les pages par WP_Query qui est "order by = ASC", je veux l'appeler "order by structure de menu" et non menu_order.
Pour E.g:
Maintenant, je veux rentrer chez moi au sommet, puis aux services, puis aux témoignages. dépend de la structure du menu ..
Comment puis-je y arriver .. Aide s'il vous plaît .. Merci d'avance!
Vous pouvez pouvez utiliser un WP_Query sur nav_menu_item
puisqu'il s'agit de son propre type de publication. Je n'ai jamais fait ça, mais peut-être que ça marcherait comme vous en avez besoin, ça vaut le coup. Il y a trois autres possibilités:
Il existe une fonction appelée wp_get_nav_menu_items()
qui vous renverra un tableau de vos éléments de menu que vous pourrez ensuite parcourir et afficher. Voici un exemple d'utilisation. Il y a quelques "Gotcha!" ici:
$item->ID
est l'ID des éléments de navigation actuels not the post_id
. L'ID de publication est maintenant $item->object_id
.$item->title
est le titre actuel des éléments de navigation et pas nécessairement le post_title
bien que, par défaut, il puisse toujours être modifié. Le moyen le plus fiable d'obtenir le titre du message consiste à utiliser le object_id
et à le transmettre à la fonction get_the_title()
.$nav_items = wp_get_nav_menu_items( 'Main Menu', array(
'order' => 'ASC', // List ASCending or DESCending
'orderby' => 'title', // Order by your usual, menu_order, post_title, etc. Check WP_Query
'post_type' => 'nav_menu_item', // To be honest, I'm not sure why this is an option, leave it be.
'post_status' => 'publish', // If there are private / draft posts in our menu, don't show them
'output' => ARRAY_A, // Return an Array of Objects
'output_key' => 'menu_order', // Not sure what this does
'nopaging' => true, // Not sure what this does
'update_post_term_cache' => false // Not sure what this does
) );
if( ! empty( $nav_items ) ) {
foreach( $nav_items as $item ) {
echo "{$item->title} - " . get_the_title( $item->object_id );
echo "<br />\n";
}
}
Vous pouvez simplement afficher votre menu tel quel à l'aide de wp_nav_menu()
et passer un Fonction Walker personnalisée pour modifier sa sortie. Un exemple de ceci pourrait être de tirer automatiquement les pages enfants des éléments de menu, sans ajouter ces pages au menu physique. Classe Walker
Habituellement, lorsque je crée un site Web pour un client, j'ai un menu WordPress et je reflète également l'ordre des pages des panneaux d'administration avec l'attribut de page menu_order
. De cette façon, vous pouvez interroger des pages en utilisant WP_Query
et orderby => 'menu_order'
En dehors de cela, il n'y a pas de orderby => 'My Menu'
facile, vous devrez trouver une solution de rechange ou une solution de contournement.
Vous pouvez utiliser la fonction wp_get_nav_menu_items () au lieu de wp_query () pour récupérer les éléments de menu d’un menu particulier dans l’ordre de la structure de menus. Une fois que vous avez fait cela, vous pouvez parcourir les éléments de menu un à un pour les utiliser à votre guise (y compris en les filtrant plus avant en fonction du type ou d’autres informations). Ceci suppose que toutes les pages sont dans le menu (ce qui est le cas si vous utilisez cela pour comprendre l'ordre).