Cómo añadir enlaces de páginas de archivo de tipos de posts personalizados al menú de navegación
No logro resolver esto. Parece que no hay ninguna casilla de verificación o función similar para añadir la página de archivo del tipo de post personalizado recién creado al menú.
Además, el enlace debe estar activo cuando estás en la página. Probablemente esto no sea posible, pero ¿hay algún plugin para ello? Por más que busco, no lo encuentro :(
Solo encontré este plugin llamado Custom Post Type Archives in Nav Menus, que en realidad no hace mucho, solo añade un enlace personalizado al menú... con la URL completa del sitio. No se activa ni es muy dinámico.
Pensé que probablemente la forma más fácil sería sobrescribir wp_nav_menu()
y añadir mis enlaces manualmente, luego usar la información de $_GET
para controlar el "enlace actualmente activo".

A partir de WordPress 4.4 (diciembre 2015), los enlaces de archivo para Custom Post Types ahora están oficialmente soportados en el núcleo de WordPress sin necesidad de código de terceros o plugins adicionales.
Puedes leer todo el ticket Trac #16075 para una discusión completa o la publicación de Make WordPress Core para un resumen de las etiquetas adicionales.
Para habilitar el soporte incorporado para enlaces de archivo en los menús, los tipos de contenido personalizados deben registrarse con valores no falsos (es decir, verdaderos) para has_archive
, publicly_queryable
y show_in_nav_menus
:
add_action( 'init', function () {
register_post_type( 'movies',
array(
'labels' => array(
'name' => __( 'Películas' ),
'singular_name' => __( 'Película' ),
'archives' => __( 'Películas' ),
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'peliculas',
),
)
);
});
Con estas adiciones, verás un nuevo metabox en la pantalla de administración Apariencia > Menús.
El enlace de archivo del tipo de contenido puede encontrarse en la pestaña 'Ver todo' dentro del metabox del tipo de contenido:
Nota: Es posible que necesites activar el panel de "opciones de pantalla" y asegurarte de que el nombre de "Archivos de Tipo de Contenido" (ej. Películas) esté marcado para que aparezca en la pantalla de Menús.

Este es un método que creo que debería funcionar (aunque no ha sido probado).
//Enganchar al filtro para el menú principal (personalizado)
// El filtro 'wp_list_pages' es un respaldo cuando no se está usando un menú personalizado
add_filter( 'wp_list_pages', 'new_nav_menu_items' );
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
//También se puede enganchar a un menú específico...
//add_filter( 'wp_nav_menu_{$menu->slug}_items', 'new_nav_menu_items' );
function new_nav_menu_items($items) {
global $wp_query;
$class ='';
//Verifica si estamos viendo el CPT 'myposttype', si es así le asigna la clase 'active'.
if(isset($wp_query->query_vars['post_type'])&& $wp_query->query_vars['post_type']=='myposttype')
$class = 'current_page_item';
//Esto genera la URL de la página de archivo del CPT
$url = add_query_arg('post_type','myposttype',site_url());
$myitem = '<li class="'.$class.'"><a href="'.$url.'">Mi Tipo de Entrada Personalizada</a></li>';
$items = $items . $myitem;
return $items;
}
Esta solución no me parece la más limpia, pero no conozco otra forma de hacerlo. Si existe alguna, ¡me gustaría verla!
Finalmente, la URL del enlace del elemento personalizado no es 'bonita' (pretty), pero podrías hacer que lo sea si conoces el slug del CPT (asumiendo que se están usando enlaces permanentes personalizados...)

Gracias por responder. Esto parece funcionar básicamente. Sin embargo, el formato de la URL necesita algunos ajustes. Y esperaba que tal vez conozcas más de WP que yo. Actualmente la URL es: example.com/?post_type=miposttype pero debería ser example.com/miposttype. ¿Quizás simplemente $url = site_url() . 'miposttype';
? Y las clases no se están incluyendo, incluyendo la clase activa actual.

Oh, lo siento, no vi el $class = '';
. Sin embargo, ¿no puedo obtener las clases normales dinámicamente y también cómo hacer que funcione el enlace actualmente activo?
