Wie füge ich dem Navigationsmenü benutzerdefinierte Links zu Archivierungsseiten hinzu?

9

Ich kann das nicht herausfinden. Es scheint kein Kontrollkästchen oder ähnliches in der Funktion zu geben, um die neu erstellte benutzerdefinierte Archivseite für Post-Typen zum Menü hinzuzufügen.

Auch der Link muss aktiv sein, wenn Sie sich auf der Seite befinden. Dies ist wahrscheinlich nicht möglich, aber gibt es ein Plugin dafür? Aus Liebe zu mir kann ich es nicht finden :(

Ich habe dieses Plugin mit dem Namen " Benutzerdefinierte Post-Typ-Archive" nur in Navigationsmenüs gefunden , das eigentlich nichts bewirkt, aber einen benutzerdefinierten Link zum Menü hinzufügt ... mit der vollständigen Site-URL. Es wird nicht aktiv oder ist nicht sehr dynamisch.

Ich dachte, der wahrscheinlich einfachste Weg wäre wp_nav_menu(), meine Links manuell zu überschreiben und hinzuzufügen und dann $_GETInformationen zu verwenden, um den "derzeit aktiven Link" zu steuern.

Kalle H. Väravas
quelle
Nachdem ich Stephens Antwort
gegabelt hatte

Antworten:

1

Dies ist eine Methode, die meiner Meinung nach funktionieren sollte (obwohl sie nicht getestet wurde).

//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;
}

Dies scheint mir nicht die sauberste Lösung zu sein, aber ich kenne keinen anderen Weg. Wenn ja, würde ich es gerne sehen!

Schließlich ist die Link-URL, auf die das benutzerdefinierte Element verweist, nicht "hübsch" - aber Sie können es so machen, wenn Sie den Slug des CPT neu erstellen (vorausgesetzt, es werden benutzerdefinierte Permalinks verwendet ...).

Stephen Harris
quelle
Danke für die Antwort. Dies scheint grundsätzlich zu funktionieren. Die Formatierung der URL muss jedoch angepasst werden. Und ich hatte gehofft, dass Sie vielleicht mehr über WP als ich wissen. Derzeit lautet die URL also: example.com/?post_type=myposttype, sollte aber example.com/myposttype sein. Vielleicht einfach $url = site_url() . 'myposttype';? Und die Klassen werden nicht berücksichtigt, einschließlich der derzeit aktiven.
Kalle H. Väravas
Oh sorry, habe das nicht gesehen $class = '';. Kann ich die normalen Klassen jedoch nicht dynamisch abrufen und auch, wie der derzeit aktive Link funktioniert?
Kalle H. Väravas
Oh doppelt sorry, habe das nicht gesehen $wp_query->query_vars['post_type']=='myposttype'. Funktioniert grundsätzlich. Dies ist sicher eine gute Basis für eine dynamischere Lösung, danke!
Kalle H. Väravas
2

Ab WordPress 4.4 (Dezember 2015) werden Archivlinks für benutzerdefinierte Post-Typen jetzt offiziell im WordPress-Kern unterstützt, ohne dass Code oder Plugins von Drittanbietern benötigt werden.

Sie können das gesamte Trac # 16075- Ticket für eine vollständige Diskussion oder den Make WordPress Core-Beitrag für eine Zusammenfassung der zusätzlichen Labels lesen .

So aktivieren Sie die neue integrierte Unterstützung für Archiv - Menü - Links, benutzerdefinierte Post - Typen müssen registriert mit nicht-Falsey (dh true) Werte für has_archive, publicly_queryableund 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',
            ),
        )
    );
});

Mit diesen Ergänzungen sehen Sie eine neue Metabox auf dem Administratorbildschirm Darstellung> Menüs .

Der Link zum Archiv des Beitragstyps befindet sich auf der Registerkarte "Alle anzeigen" in der Metabox für den Beitragstyp:

WordPress Benutzerdefinierter Beitragstyp Archiv Nav Menüs Link

Hinweis: Möglicherweise müssen Sie die Schublade "Bildschirmoptionen" umschalten und sicherstellen, dass Ihr Name "Post Type Archives" (z. B. Filme) aktiviert ist, damit er auf dem Menübildschirm angezeigt wird.

rjb
quelle