为每个作者显示一个帖子,并将查询限制为8个帖子

时间:2015-11-18 作者:Erik

我想在frontpage上显示来自多个作者的8个最新产品。每个作者需要显示1个最新产品。

目前,我正在使用基本wp查询来显示最近的8种产品。

$args = array (
\'post_type\'              => array( \'product\' ),
\'posts_per_page\'         => \'8\',
\'order\'                  => \'DESC\',
\'orderby\'                => \'date\',
);

// The Query
$query = new WP_Query( $args );
实现这一目标的最佳方式是什么?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我相信您可以通过按作者ID对查询进行分组来实现这一效果,这将需要一个过滤器(mostly cribbed from the Codex):

function my_posts_groupby($groupby) {
    global $wpdb;
    $groupby = "{$wpdb->posts}.post_author";
    return $groupby;
}
add_filter( \'posts_groupby\', \'my_posts_groupby\' );
但是,如果您的作者少于8位,这将不起作用。(您将获得与您的作者数量相等的结果。)如果是这样,您将需要更复杂的逻辑和更复杂的代码。

SO网友:Sean Doherty

任何一个在这几年后来到这里的人,都希望得到完整的代码,而不是从评论和公认的答案中拼凑出来,来吧!

Declare the function that limits the post results to 1 per author. 对我来说,这是在函数中。php:

function one_per_author($groupby) {
    global $wpdb;
    $groupby = "{$wpdb->posts}.post_author";
    return $groupby;
}
请勿使用以下内容apply_filter 根据公认的答案,这将适用于所有循环。

Next run the loop you would like to filter, 打电话给applyremove 直接在其前后过滤:

$args = array (
\'post_type\'              => array( \'product\' ),
\'posts_per_page\'         => \'8\',
\'order\'                  => \'DESC\',
\'orderby\'                => \'date\',
);

add_filter( \'posts_groupby\', \'one_per_author\' );
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
   while ( $query->have_posts() ) : $query->the_post();
      // Do loop stuff
   endwhile;
endif;
remove_filter( \'posts_groupby\', \'one_per_author\' );

相关推荐

Add Date and Author to Posts

我需要在博客帖子中添加日期和作者。该行需要如下示例所示:2018年1月20日发布姓名单击该日期将带您进入一个页面,其中包含该日期发布的所有帖子。单击名称/作者将进入包含该作者所有帖子的页面。我做了一些研究,找到了可以添加到单曲中的代码。php模板。<div class=\"sample\">Posted on <?php the_date(); ?> by <?php the_author(); ?></div> 我需要为“sam