Cum să adaug link-uri pentru arhivele de posturi personalizate în meniul de navigare?
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".

Î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:
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.

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...)

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.

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?
