web-dev-qa-db-ja.com

最近の投稿をwp navメニューにリストする方法は?

私はしばらくこれを試していました、そして明確な答えを得ませんでした。

私のメニュー項目の1つに11の最近の投稿を表示する必要があります。私のメニューはこんな感じです:

アイテム1・マンバ・アイテム3

MAMBAをロールオーバーするときは、投稿のタイトルとそれぞれのURLを表示する必要があります。このコードは Joeyjoejoeのカテゴリメニュー項目とその最後の10件の投稿(サブメニュー )から取得しましたが、すべてのサブメニュー項目の最新の投稿は次のように貼り付けます。カテゴリ.

MAMBAにのみ表示されるように少し変更する必要がありました。

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

そしてターゲットアイテム:

$post->menu_item_parent = 45;

残念ながら、コードは最近の投稿リストを繰り返した形で繰り返し始めました。

マンバ

..........

投稿16

投稿15

...

投稿16

投稿15

...

ここでの私の質問は、選択したカテゴリから特定のメニュー項目までの最近の投稿の管理された数をリストする方法です。

あなたが与えることができるすべての助けてくれてありがとう。

宜しくお願いします。 H.

1
Horacsio

次のように各メニュー項目のID値を確認するのはどうでしょうか。

   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:私はget_posts()をforeach入力引数から外しました。

更新

これは私のインストールで動作します:

!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