WordPress – comment afficher des liens vers des pages « privées » dans wp_nav_menu ?

Publié par Jean-Michel le

Dans mon site WordPress, j’ai l’obligation d’afficher privateles 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 andspé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_itemscrochet, 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_menufonction 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_walkercar il utilise simplement les données et ne les récupère pas ).

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *