Come aggiungere collegamenti personalizzati alla pagina di archivio del tipo di post nel menu di navigazione?


9

Non riesco a capirlo. Sembra che non ci sia alcuna casella di controllo o qualcosa di simile nella funzione per aggiungere la pagina di archivio del tipo di post personalizzato appena creato nel menu.

Anche il collegamento deve essere attivo, se ci si trova nella pagina. Questo probabilmente non è possibile, ma c'è qualche plugin per questo? Per amor mio, non riesco a trovarlo :(

Ho trovato questo plugin chiamato Custom Post Type Archives in Nav Menu , che in realtà non fa nulla, ma aggiunge un link personalizzato al menu ... con l'URL completo del sito. Non diventa attivo o non è molto dinamico.

Ho pensato che, probabilmente il modo più semplice sarebbe quello di sovrascrivere wp_nav_menu()e aggiungere manualmente i miei collegamenti e quindi utilizzare le $_GETinformazioni per controllare il "collegamento attualmente attivo".


Dopo aver cercato la risposta di Stephen, ho finito con questa soluzione: wordpress.org/support/topic/… Spero che possa aiutare qualcuno in futuro :)
Kalle H. Väravas,

Risposte:


1

Questo è un metodo che penso dovrebbe funzionare (anche se non è testato).

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

Non mi sembra che questa sia la soluzione più pulita, ma non conosco nessun altro modo. Se c'è, mi piacerebbe vederlo!

Infine, l'URL del link a cui si collega il link dell'elemento personalizzato non è "carino", ma è possibile farlo in modo nuovo se si utilizza la lumaca del CPT (supponendo che vengano utilizzati permalink personalizzati ....)


Grazie per avermi risposto. Questo sembra fondamentalmente funzionare. Tuttavia, la formattazione dell'URL richiede alcune modifiche. E speravo che forse conoscessi WP più di me. Quindi attualmente l'URL è: example.com/?post_type=myposttype ma dovrebbe essere example.com/myposttype. Forse semplicemente $url = site_url() . 'myposttype';? E le classi non vengono incluse, inclusa quella attualmente attiva.
Kalle H. Väravas,

Oh scusa, non ho visto $class = '';. Tuttavia, non riesco a ottenere le normali classi in modo dinamico e anche come far funzionare il collegamento attualmente attivo?
Kalle H. Väravas,

Oh doppio scusa, non ho visto $wp_query->query_vars['post_type']=='myposttype'. Funziona sostanzialmente. Questa è sicuramente una buona base per una soluzione più dinamica, grazie!
Kalle H. Väravas,

2

A partire da WordPress 4.4 (dicembre 2015), i collegamenti di archivio Tipo di posta personalizzato sono ora ufficialmente supportati nel core di WordPress senza che sia necessario alcun codice o plug-in di terze parti.

Puoi leggere l'intero ticket Trac # 16075 per una discussione completa o il post Crea WordPress Core per un riepilogo delle etichette aggiuntive .

Per attivare il nuovo supporto integrato per i collegamenti del menu di archivio, i tipi di messaggi personalizzati devono registrato con valori non Falsey (cioè veri) per has_archive, publicly_queryablee 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',
            ),
        )
    );
});

Con queste aggiunte, vedrai un nuovo metabox nella schermata di amministrazione Aspetto> Menu .

Il link per l'archiviazione del tipo di post è disponibile nella scheda "Visualizza tutto" all'interno del metabox del tipo di post:

Link dei menu di navigazione dell'archivio dei post personalizzati di WordPress

Nota: potrebbe essere necessario attivare o disattivare il cassetto "Opzioni schermo" e assicurarsi che il nome "Archivi tipo di messaggio" (ad es. Film) sia selezionato affinché appaia nella schermata Menu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.