WordPress – comment afficher des liens vers des pages « privées » dans wp_nav_menu ?
Dans mon site WordPress, j’ai l’obligation d’afficher private
les liens dans la navigation principale (via wp_nav_menu
) même si l’utilisateur n’est pas connecté (j’ai juste besoin d’afficher le lien, pas de changer qui peut voir le contenu réel).
Je peux le faire ailleurs, en wp_list_pages and
spécifiant le ou les post_status que je veux afficher, mais je ne vois pas comment appliquer cela à wp_nav_menu
.
Cela marche:
wp_list_pages(array(
'title_li' => '',
'child_of' => $page->ID,
'post_status' => 'published,private'
));
Existe-t-il un moyen de faire quelque chose de similaire avec cela?
wp_nav_menu(array(
'menu' => 'primary',
'theme_location' => 'primary',
'container' => FALSE,
'walker' => new MegaMenuWalker
'depth' => 2));
Mes recherches jusqu’à présent montrent un tas de façons de post-traiter les résultats pour filtrer les pages privées (ou brouillons) à l’aide du wp_get_nav_menu_items
crochet, mais je n’ai pas encore trouvé quelque chose pour faire l’inverse.
Je suppose que je pourrais faire une requête personnalisée pour saisir des éléments de cette façon, mais cela ne me permettrait pas d’utiliser mon déambulateur personnalisé.
De manière alléchante, il y a wp_get_nav_menu_items( $menu, $args )
ce qui me permet de spécifier l’argument post_status, mais je dois appliquer mon propre rendu plutôt que de pouvoir utiliser le marcheur … à moins qu’il n’y ait un moyen d’utiliser le marcheur en dehors du contexte de wp_nav_menu
?
Solution n°1 trouvée
À partir de la réponse acceptée, les pages privées n’apparaissent pas dans le générateur de menus par défaut. Voici un moyen de contourner ce problème.
Solution n°2 trouvée
Voici un court extrait pour afficher les pages privées dans le constructeur de menu :
add_filter( 'nav_menu_meta_box_object', 'show_private_pages_menu_selection' );
/**
* Add query argument for selecting pages to add to a menu
*/
function show_private_pages_menu_selection( $args ){
if( $args->name == 'page' ) {
$args->_default_query['post_status'] = array('publish','private');
}
return $args;
}
Ajoutez ceci à un plugin personnalisé ou à votre thème functions.php
, et vous pourrez ajouter une page privée dans n’importe quel menu.
Solution n°3 trouvée
La wp_nav_menu
fonction parcourt uniquement les liens dans le menu souhaité et ne les récupère pas. Comme on peut le voir dans le code source ( line 270
), la fonction qui récupère les liens n’obtient que le nom/id/etc. du menu et pas d’autres arguments.
Du manuel :
Affiche un menu de navigation créé dans le panneau Apparence ? Menus.
Étant donné un paramètre theme_location, la fonction affiche le menu affecté à cet emplacement. Si un tel emplacement n’existe pas ou qu’aucun menu ne lui est assigné, le paramètre fallback_cb déterminera ce qui est affiché.
S’il n’est pas donné de paramètre theme_location, la fonction affiche
- le menu correspondant à l’ID, au slug ou au nom donné par le paramètre de menu ;
- sinon, le premier menu non vide ; sinon (ou si le menu donné par menu est vide), sortie de la fonction donnée par le paramètre fallback_cb (wp_page_menu(), par défaut) ;
- sinon rien.
Par conséquent, vous devez ajouter ces pages privées au menu à l’aide du panneau d’administration WP ou créer votre propre fonction qui récupère les pages et crée un menu (veuillez noter : pas un nav_walker
car il utilise simplement les données et ne les récupère pas ).
0 commentaire