web-dev-qa-db-fra.com

Comment lister les publications récentes dans un menu de navigation wp?

J'essaie cela depuis quelque temps et je n'ai pas eu de réponse claire.

J'ai besoin d'afficher 11 articles récents dans l'un de mes éléments de menu. Mon menu est comme:

POINT 1 · MAMBA · POINT 3

Je dois afficher les titres des publications et les URL correspondantes lors du survol de MAMBA. J'ai reçu ce code de l'élément de menu Catégorie de Joeyjoejoe et de ses 10 derniers articles sous forme de sous-menu , mais je l'ai collé tel quel, et je peux obtenir les articles récents pour catégories.

J'ai du changer un peu pour apparaître uniquement dans MAMBA:

$category_ten_last_posts = array(
    'showposts' => 11,
    'category_name' => 'mamba',

et l'élément cible:

$post->menu_item_parent = 45;

tristement, le code a commencé à répéter la liste des publications récentes, de manière dupliquée:

Mamba

..........

Poste 16

Poste 15

...

Poste 16

Poste 15

...

Ma question est la suivante: comment répertorier un nombre contrôlé de publications récentes d’une catégorie choisie dans un élément de menu spécifique?

Merci pour toute l'aide que vous pouvez donner.

Meilleures salutations. H.

1
Horacsio

Qu'en est-il de vérifier la valeur de l'ID de chaque élément de menu comme suit:

   if( $item->ID === 45):  // ADD THIS MENU-ITEM ID CHECK
        // Query the lasts ten category posts
        $category_ten_last_posts = array(
             'posts_per_page' => 11,
             'category_name' => 'mamba',
             'orderby' => 'date',
             'order' => 'DESC'
        );
        $posts = get_posts( $category_ten_last_posts );
        foreach ( $posts  as $post ) {
            //...
         }
    endif;

ps: j'ai déplacé la get_posts() de l'argument d'entrée foreach.

Mettre à jour

Cela fonctionne sur mon installation:

!is_admin() AND add_filter( 'wp_get_nav_menu_items', 'display_lasts_ten_posts_for_categories_menu_item', 10, 3 );

// Add the ten last posts of af categroy menu item in a sub menu
function display_lasts_ten_posts_for_categories_menu_item( $items, $menu, $args ){
    $menu_order = count($items); 
    $child_items = array();
    foreach ( $items as $item ):
        if( $item->ID === 45 ): 
            // Query the lasts ten category posts
            $category_ten_last_posts = array(
                'posts_per_page' => 11,
                'category_name'  => 'mamba',
                'orderby'        => 'date',
                'order'          => 'DESC'
            );
            $posts = get_posts( $category_ten_last_posts );
            foreach( $posts as $post ):
                // Add sub menu item
                $post->menu_item_parent = $item->ID;
                $post->post_type        = 'nav_menu_item';
                $post->object           = 'custom';
                $post->type             = 'custom';
                $post->menu_order       = ++ $menu_order;
                $post->title            = $post->post_title;
                $post->url              = get_permalink( $post->ID );
                /* add children */
                $child_items[]          = $post;
            endforeach;
        endif;
    endforeach;
    return array_merge( $items, $child_items );
}
0
birgire