¿Cómo agregar enlaces de página de archivo de tipo de publicación personalizada al menú de navegación?

9

No puedo resolver esto. Parece que no hay una casilla de verificación o algo similar en la función para agregar la página de archivo de tipo de publicación personalizada recién creada en el menú.

Además, el enlace debe estar activo, si está en la página. Esto probablemente no sea posible, pero ¿hay algún complemento para ello? Por mi amor, no puedo encontrarlo :(

Solo encontré este complemento llamado Custom Post Type Archives en Nav Menus , que realmente no hace nada, pero agrega un enlace personalizado al menú ... con la URL completa del sitio. No se activa o no es muy dinámico.

Pensé que, probablemente, la forma más fácil sería anular wp_nav_menu()y agregar mis enlaces manualmente y luego usar la $_GETinformación para controlar el "enlace actualmente activo".

Kalle H. Väravas
fuente
Después de bifurcar la respuesta de Stephen, terminé con esta solución: wordpress.org/support/topic/… Espero que ayude a alguien en el futuro :)
Kalle H. Väravas

Respuestas:

1

Este es un método que creo que debería funcionar (aunque no está probado).

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

Esto no me parece la solución más limpia, pero no conozco otra forma. Si es así, ¡me gustaría verlo!

Finalmente, la url de enlace a la que se enlaza el elemento personalizado no es "bonita", pero podría hacerlo si actualiza la ficha del CPT (suponiendo que se estén utilizando enlaces permanentes personalizados ...)

Stephen Harris
fuente
Gracias por responder. Esto parece funcionar básicamente. Sin embargo, el formato de la URL necesita algunos ajustes. Y esperaba que supieras más sobre WP que yo. Entonces, la url es: example.com/?post_type=myposttype pero debería ser example.com/myposttype. ¿Quizás simplemente $url = site_url() . 'myposttype';? Y las clases no se incluyen, incluida la actualmente activa.
Kalle H. Väravas
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?
Kalle H. Väravas
Oh doble perdón, no vi el $wp_query->query_vars['post_type']=='myposttype'. Funciona básicamente. Esta es una buena base para una solución más dinámica, ¡gracias!
Kalle H. Väravas
2

A partir de WordPress 4.4 (diciembre de 2015), los enlaces de archivo de tipo de publicación personalizada ahora se admiten oficialmente en el núcleo de WordPress sin ningún código de terceros o complementos necesarios.

Puede leer el boleto completo de Trac # 16075 para una discusión completa o la publicación Make WordPress Core para obtener un resumen de las etiquetas adicionales .

Para habilitar el nuevo soporte integrado para los enlaces del menú de archivo, tipos de envíos personalizados que registrada con valores no Falsey (es decir, verdaderos) para has_archive, publicly_queryabley 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 estas adiciones, verá un nuevo metabox en la pantalla de administración Apariencia> Menús .

El enlace del archivo de tipo de publicación se puede encontrar en la pestaña 'Ver todo' dentro del metabox de tipo de publicación:

WordPress Tipo de publicación personalizada Archivo Menús de navegación Enlace

Nota: es posible que deba alternar el cajón de "opciones de pantalla" y asegurarse de que su nombre de "Archivos de tipo de publicación" (por ejemplo, Películas) esté marcado para que aparezca en la pantalla Menús.

rjb
fuente