Comment ajouter des liens de page d'archive de type de publication personnalisés au menu de navigation?

9

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

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

Je n'ai trouvé que ce plugin appelé Custom Post Type Archives dans Nav Menus , qui ne fait vraiment rien, mais ajoute un lien personnalisé au menu ... avec l'URL complète du site. Il ne devient pas actif ou n'est pas très dynamique.

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

Kalle H. Väravas
la source
Après avoir obtenu la réponse de Stephen, je me suis retrouvé avec cette solution: wordpress.org/support/topic/… J'espère que cela aidera quelqu'un à l'avenir :)
Kalle H. Väravas

Réponses:

1

Je pense que c'est une méthode qui devrait fonctionner (bien qu'elle ne soit pas 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 pas d'autre moyen. S'il y en a, j'aimerais le voir!

Enfin, le lien URL vers lequel l'élément personnalisé est lié n'est pas «joli» - mais vous pouvez le faire si vous nouveau le slug du CPT (en supposant que des permaliens personnalisés soient utilisés ....)

Stephen Harris
la source
Merci d'avoir répondu. Cela semble fonctionner essentiellement. Cependant, le formatage de l'URL nécessite quelques ajustements. Et j'espérais peut-être que vous en savez plus sur WP que moi. Donc, actuellement, l'URL est: example.com/?post_type=myposttype mais devrait être example.com/myposttype. Peut-être simplement $url = site_url() . 'myposttype';? Et les classes ne sont pas incluses, y compris celle actuellement active.
Kalle H. Väravas
Oh désolé, je n'ai pas vu le $class = '';. Cependant, je ne peux pas obtenir les classes normales de manière dynamique et aussi comment faire fonctionner le lien actuellement actif?
Kalle H. Väravas
Oh double désolé, je n'ai pas vu le $wp_query->query_vars['post_type']=='myposttype'. Fonctionne essentiellement. C'est une bonne base pour une solution plus dynamique, merci!
Kalle H. Väravas
2

Depuis WordPress 4.4 (décembre 2015), les liens d'archive Custom Post Type sont désormais officiellement pris en charge dans le noyau WordPress sans aucun code ou plug- in tiers requis.

Vous pouvez lire l'intégralité du ticket Trac # 16075 pour une discussion complète ou le poste Make WordPress Core pour un résumé des étiquettes supplémentaires .

Pour activer le nouveau support intégré pour les liens de menu archive, types de postes personnalisés doivent enregistré avec des valeurs non-Falsey (c. -à- vrai) pour has_archive, publicly_queryableet 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 d'administration Apparence> Menus .

Le lien d'archivage du type de publication se trouve sous l'onglet «Afficher tout» dans la métabox de type de publication:

Lien vers les menus de navigation des types de publication personnalisés de WordPress

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

rjb
la source