web-dev-qa-db-fra.com

Les types de publication personnalisés sont affichés en tant que sous-menus dans le menu de navigation

J'ai créé un type de message personnalisé appelé "Collections". J'aimerais avoir dans le menu de navigation (pas de menus personnalisés impliqués) un élément de menu 'Collections' qui renvoie à la page index du type de message personnalisé Collections et une liste des éléments de sous-menu n reliant chacun à un seul post.

J'ai fait des recherches et je pense qu'il n'y a pas de littérature sur le sujet. Il y a probablement eu un certain accrochage (réécriture de la wp_nav_menu() peut-être).

J'ai réussi à avoir l'élément de menu 'Collections' en déclarant 'show_in_nav_menus' => true dans register_post_type() mais je ne sais pas comment faire pour que les posts simples apparaissent comme un sous-menu.

De l'aide?

Remarque: utilisation d'un thème thématique enfant

5
Naoise Golden

Voici un exemple sur la modification d'un élément de menu pour ajouter des éléments. Dans cet exemple, un élément de catégorie est étendu pour avoir un sous-menu généré dynamiquement, répertoriant les publications, où l'élément de menu a une classe d'exposition avec X où X est le nombre de publications à afficher:

function menu_show_category_posts( $item_output = '', $item = '', $depth = '', $args = '' ) {
    global $post;

    $item_output = icit_add_class_attrib( $item_output, 'depth-' . ( $depth ? $depth : 1 ) );

    if ( $item->type == 'taxonomy' && $item->object == 'category' && is_array( $item->classes ) ) {
        $query = false;
        $showposts = 10;
        $preview = 0;
        $new_html = array( );
        $i = 0;

        foreach( $item->classes as $class ) {
            if ( preg_match( '/^showposts-?(\d*)/', $class, $matches ) ) {
                $query = true;
                $showposts = ! empty( $matches[ 1 ] ) && intval( $matches[ 1 ] ) ? intval( $matches[ 1 ] ) : 10;
            }
        }

        if ( $query ) {
            $the_posts = get_posts( array(
                             'category' => $item->object_id,
                             'numberposts' => $showposts
                            ) );

            if ( ! empty( $the_posts ) ) {
                $new_html[] = '<ul class="sub-menu">';

                foreach( ( array ) $the_posts as $post ) {
                    setup_postdata( $post );
                    $new_html[] = '<li class="">';
                    $new_html[] = the_title( '<a href="' . get_permalink( ) . '" class="depth-' . ( $depth ? $depth + 1 : 2 ) . '">', '</a>', false );
                    $new_html[] = '</li>';
                }

                $new_html[] = '</ul>';
                $item_output .= implode( "\n", $new_html );
            }
        }
    }

    return $item_output;
}

add_filter( 'walker_nav_menu_start_el', 'menu_show_media_post', 10, 4 );
1
Tom J Nowell