web-dev-qa-db-fra.com

Comment ajouter une page d'archive de type message personnalisée au menu de navigation?

Je ne peux pas comprendre cela. Il semble n'y avoir aucune case à cocher ou quelque chose de similaire pour ajouter la nouvelle page d'archive de type publication personnalisée dans le menu.

De plus, le lien doit être actif, si vous êtes sur la page. Ce n'est probablement pas possible, mais y a-t-il un plugin pour cela? Pour l'amour de moi, je ne le trouve pas :(

J'ai seulement trouvé ce plugin appelé Custom Post Type Archives dans les menus de navigation , cela ne fait vraiment rien, mais ajoute un lien personnalisé au menu ... avec l'URL complète du site. Il ne va pas actif ou n'est pas très dynamique.

Je pensais que, probablement, le moyen le plus simple serait de remplacer wp_nav_menu() et d’ajouter mes liens manuellement, puis d’utiliser les informations $_GET pour contrôler le "lien actuellement actif".

9
Kalle H. Väravas

C’est une méthode qui, à mon avis, devrait fonctionner (même si elle n’a pas été testée).

//Hook on to the filter for the (custom) main menu
// 'wp_list_pages' filter is a fallback, when a custom menu isn't being used 
add_filter( 'wp_list_pages', 'new_nav_menu_items' );
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
//Can also hook into a specific menu...
//add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

function new_nav_menu_items($items) {
    global $wp_query;
    $class ='';

    //Checks if we are viewing CPT 'myposttype', if so give it the 'active' class.
    if(isset($wp_query->query_vars['post_type'])&& $wp_query->query_vars['post_type']=='myposttype') 
        $class = 'current_page_item';

    //This generates the url of the CPT archive page
    $url = add_query_arg('post_type','myposttype',site_url());

    $myitem = '<li class="'.$class.'"><a href="'.$url.'">My Custom Post Type</a></li>';

    $items = $items . $myitem;
    return $items;
}

Cela ne me semble pas être la solution la plus propre, mais je ne connais aucun autre moyen. S'il y en a, j'aimerais bien le voir!

Enfin, l’URL de lien vers l’élément personnalisé n’est pas "joli" - mais vous pouvez le faire de la sorte si vous créez le nouveau slug du CPT (en supposant que des permaliens personnalisés sont utilisés ...)

1
Stephen Harris

Depuis WordPress 4.4 (décembre 2015), les liens d'archive Custom Post Type sont maintenant officiellement pris en charge dans le noyau WordPress sans aucun code tiers ni plugin requis.

Vous pouvez lire le billet entier Trac # 16075 pour une discussion complète ou le post de Make WordPress Core pour un résumé des étiquettes supplémentaires .

Pour activer la nouvelle prise en charge intégrée des liens de menu d’archive, les types de publication personnalisés doivent être enregistrés avec des valeurs non-falsey (c'est-à-dire true) pour has_archive, publicly_queryable et show_in_nav_menus:

add_action( 'init', function () {
    register_post_type( 'movies',
        array(
            'labels' => array(
                'name' => __( 'Movies' ),
                'singular_name' => __( 'Movie' ),
                'archives' => __( 'Movies' ),
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array(
                'slug' => 'movies',
            ),
        )
    );
});

Avec ces ajouts, vous verrez une nouvelle métabox sur l'écran Apparence> Menus admin.

Le lien d'archive de type de publication se trouve sous l'onglet "Afficher tout" dans la métaboxe de type de publication:

 WordPress Custom Post Type Archive Nav Menus Link 

Remarque: vous devrez peut-être basculer le tiroir "Options d'écran" et vous assurer que votre nom "Archives de type de publication" (par exemple, Films) est coché pour qu'il apparaisse sur l'écran Menus.

2
rjb