查询以返回每个作者最多一个帖子

时间:2013-01-03 作者:Peter Willis III

我们正在我们的网站上引入一个“特写作者”区域,并希望显示一组精选作者的最新文章。然而,我们只希望每个作者最多显示一篇文章。因此,一位作者可能在另一位作者发表文章后发表了5次,但不管怎样,只有一篇文章应该出现。目前我得到的代码是:

<?php
$args = array(
\'showposts\' => 5,
\'author\' => "6800,3845,1720,7045,4949"
);

$the_query = new WP_Query( $args );

while ( $the_query->have_posts() ) : $the_query->the_post(); 

?>

// DISPLAYING STUFF

<?php endwhile; wp_reset_query(); ?>
我考虑过的一个可能的解决方案是查询更多帖子并设置一个数组,然后每次都检查数组,看看是否有作者已经在其中。如果是,它将继续到下一行。但一个明显的问题是,如果某个“特写作者”有一段时间没有写文章,我可能最终不得不撤回100篇文章。

我对PHP/MySQL还是相当陌生的,可能有一个解决方案让我眼前一亮。感谢您的帮助。

3 个回复
SO网友:s_ha_dum

你需要GROUP BY 作者ID,需要对其进行筛选posts_groupby. 该过滤器的Codex页面不存在,但其工作方式如下posts_join. 类似于。。。

function filter_authors($groupby) {
  global $wpdb;
  $groupby = " {$wpdb->posts}.post_author";
 return $groupby;
}
add_filter(\'posts_groupby\',\'filter_authors\');

$args = array(
 \'showposts\' => 3,
 \'author\' => "1,2,3"
);

$the_query = new WP_Query( $args );

while ( $the_query->have_posts() ) : $the_query->the_post();
 echo $post->post_title.\' :: \'.$post->post_author."<br/>";
endwhile;
在中使用您自己的值$args 当然

这将影响在该代码块之后运行的页面上的任何其他查询。你可能想remove the filter 完成后。

remove_filter(\'posts_groupby\',\'filter_authors\');

SO网友:brasofilo

另一种方法可以是使用循环的函数get_posts 并打印结果。

检查此问题(&A);答:When should you use WP_Query vs query_posts() vs get_posts()?

// function located in the theme\'s functions.php
function wpse_78117_print_authors_last_post() 
{
    $user_ids = array( \'1\', \'2\' );
    foreach( $user_ids as $user )
    {
        $args = array( 
                \'post_type\'     => \'post\',
                \'numberposts\'   => 1,
                \'author\'        => $user
            ); 
        
        // as we are getting only 1 post, extract it from the returned array
        $user_post = array_shift( get_posts( $args ) );
        
        // similar
        $nick = array_shift( get_user_meta( $user, \'nickname\' ) );

        // custom output, $user_post contains all the post normal data
        echo $user_post->post_title . \', by: \' . $nick;
    }
}
然后在任何主题模板中使用它:
<?php wpse_78117_print_authors_last_post(); ?>.

SO网友:Zachary

我有一个问题,因为每个作者只想在滑块中放一篇文章,我这样解决了这个问题:

$query_args = array(\'post_type\' => \'post\');
$query = new WP_Query($query_args);
$author_ids = array(); // Array of author id\'s to check before executing 
if ($query->have_posts()) : $query->the_post();
  if (!in_array(get_the_author_meta(\'ID\'), $author_ids)) {
    // DO YOUR STUFF
    // Afterwards, add that id to our array so we don\'t get another one
    array_push($author_ids, get_the_author_meta(\'ID\'));
  }
endif;

结束

相关推荐

Add gravatar to author list

我使用此代码在侧栏中列出网站上的所有作者。它可以工作,除了我还需要把他们的Gravatar图像拉进去。它在主页上循环工作<?php echo get_avatar( get_the_author_email(), \'80\' ); ?> 但我有没有办法把它也添加到这个列表中?而且我想不出使用此代码排除“Admin”帐户的方法,这可能吗?非常感谢。<?php $order = \'user_nicename\'; $user_ids = $wpdb->ge