web-dev-qa-db-ja.com

カテゴリーメニュー項目とサブメニューとしての最後の10の投稿

私はメインナビゲーションメニューの要素としていくつかの投稿カテゴリを持っています、そして私はサブメニューとしてこのカテゴリの10の最後の投稿を表示したいです。

例:カテゴリ1最終投稿1最終投稿2

メインメニューは管理者パネルに組み込まれています、そしてそれを自動的に達成するためのフックまたは何かがあるかどうか疑問に思います。私はそれをハードコーディングする方法を知っています、しかし私は管理者パネルからのクールなメニュー版を使い続けたいです。

何か案は?

1
Joeyjoejoe

私はついにfunction.phpのこのコードでそれを達成します

// Front end only, don't hack on the settings page
if ( ! is_admin() ) {
// Hook in early to modify the menu
// This is before the CSS "selected" classes are calculated
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); /* Offset menu order */
$child_items = array();

// Loop through the menu items looking category menu object
foreach ( $items as $item ) {

    // Test if menu item is a categroy and has no sub-category
    if ( 'category' != $item->object || ('category' == $item->object && get_category_children($item->object_id)) )
        continue;

    // Query the lasts ten category posts
    $category_ten_last_posts = array(
            'numberposts' => 10,
            'cat' => $item->object_id,
            'orderby' => 'date',
            'order' => 'DESC'
    );

    foreach ( get_posts( $category_ten_last_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;
    }
}
return array_merge( $items, $child_items );
}

これはサブメニューとして表示され、管理パネルのメニュー項目またはサブメニュー項目として配置されたカテゴリの最後の10件の投稿です。

このコードはこれから非常にインスピレーションを得ています: http://codeseekah.com/2012/03/05/list-all-post-in-wordpress-navigation-menu /

4
Joeyjoejoe