Cum să adaug link-uri pentru arhivele de posturi personalizate în meniul de navigare?

5 dec. 2011, 17:37:57
Vizualizări: 15.9K
Voturi: 9

Nu reușesc să îmi dau seama cum să fac asta. Se pare că nu există nicio casetă de bifat sau funcționalitate similară pentru a adăuga arhiva posturilor personalizate nou create în meniu.

De asemenea, link-ul trebuie să devină activ când te afli pe acea pagină. Probabil că acest lucru nu este posibil, dar există vreun plugin pentru asta? Nu reușesc să găsesc nimic :(

Am găsit doar acest plugin numit Custom Post Type Archives in Nav Menus, care nu face altceva decât să adauge un link personalizat în meniu... cu URL-ul complet al site-ului. Nu devine activ sau nu este foarte dinamic.

Cred că cel mai simplu ar fi să suprascriu funcția wp_nav_menu() și să adaug manual link-urile mele, apoi să folosesc informațiile din $_GET pentru a controla "link-ul curent activ".

1
Comentarii

După ce am bifurcat răspunsul lui Stephen, am ajuns la această soluție: http://wordpress.org/support/topic/how-to-add-custom-post-type-archive-slug-to-nav-menu?replies=5#post-2482529 Sper să ajute pe cineva în viitor :)

Kalle H. Väravas Kalle H. Väravas
5 dec. 2011 22:05:55
Toate răspunsurile la întrebare 2
0

Începând cu WordPress 4.4 (decembrie 2015), linkurile pentru arhivele de Custom Post Type sunt acum suportate oficial în nucleul WordPress fără a fi nevoie de cod sau plugin-uri terțe.

Puteți citi întregul ticket Trac #16075 pentru o discuție completă sau postul de pe Make WordPress Core pentru un rezumat al etichetelor adiționale.

Pentru a activa noul suport integrat pentru linkurile de arhivă din meniu, custom post type-urile trebuie să fie înregistrate cu valori non-false (adică true) pentru has_archive, publicly_queryable și show_in_nav_menus:

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

Cu aceste adăugiri, veți vedea o nouă cutie metabox pe ecranul de administrare Aspect > Meniuri.

Linkul pentru arhiva post type poate fi găsit în fila 'Vezi toate' din cadrul metabox-ului post type:

Link pentru Arhive de Custom Post Type în Meniurile WordPress

Notă: Poate fi necesar să deschideți panoul "opțiuni ecran" și să vă asigurați că numele "Arhive Post Type" (de ex. Filme) este bifat pentru a apărea pe ecranul Meniuri.

25 ian. 2017 21:59:32
3

Acesta este o metodă care cred că ar trebui să funcționeze (deși nu a fost testată).

//Conectare la filtrul pentru meniul principal (personalizat)
// Filtrul 'wp_list_pages' este o rezervă, când nu este utilizat un meniu personalizat
add_filter( 'wp_list_pages', 'new_nav_menu_items' );
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
// Se poate conecta și la un anumit meniu...
//add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );

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

    //Verifică dacă vizualizăm CPT 'myposttype', dacă da, îi atribuie clasa 'active'.
    if(isset($wp_query->query_vars['post_type'])&& $wp_query->query_vars['post_type']=='myposttype') 
        $class = 'current_page_item';

    //Acesta generează URL-ul paginii de arhivă CPT
    $url = add_query_arg('post_type','myposttype',site_url());

    $myitem = '<li class="'.$class.'"><a href="'.$url.'">Tipul meu personalizat de postare</a></li>';

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

Nu mi se pare că aceasta este cea mai elegantă soluție, dar nu cunosc altă metodă. Dacă există, aș dori să o văd!

În final, URL-ul către care face legătura elementul personalizat nu este 'prietenos' - dar l-ați putea face astfel dacă ați cunoaște slug-ul CPT-ului (presupunând că sunt utilizate permalink-uri personalizate...)

5 dec. 2011 18:21:32
Comentarii

Mulțumesc pentru răspuns. Se pare că funcționează în principiu. Totuși, formatarea URL-ului necesită unele ajustări. Și speram că poate știi mai multe despre WP decât mine. Deci în prezent URL-ul este: example.com/?post_type=myposttype dar ar trebui să fie example.com/myposttype. Poate pur și simplu $url = site_url() . 'myposttype';? Și clasele nu sunt incluse, inclusiv cea activă în prezent.

Kalle H. Väravas Kalle H. Väravas
5 dec. 2011 20:11:11

Oh scuze, nu am văzut $class = '';. Totuși, nu pot obține clasele normale dinamic și cum să fac ca link-ul activ să funcționeze?

Kalle H. Väravas Kalle H. Väravas
5 dec. 2011 20:15:10

Oh dublă scuze, nu am văzut $wp_query->query_vars['post_type']=='myposttype'. Funcționează în principiu. Aceasta este o bază bună pentru o soluție mai dinamică cu siguranță, mulțumesc!

Kalle H. Väravas Kalle H. Väravas
5 dec. 2011 20:18:17