如何按作者对特定循环帖子进行分组?

时间:2012-06-22 作者:aalaap

我有指向WordPress博客分类页面的链接。这些类别页面显示该类别和子类别中的所有帖子。我想按作者对这些列表进行分组。

我想需要修改类别。php首先列出在该特定类别中拥有帖子的所有作者,然后为每个作者多次运行WP\\U查询。第二部分是可以的,但我不知道如何获得这类帖子的作者列表。

2 个回复
SO网友:chrisguitarguy

我认为你不需要获得某一类别的作者列表,也不需要使用一堆个人WP_Query\'s、 你只需要order posts 按作者排序,并查看作者何时更改。

这有两个部分。一个是修改类别页面上的循环以按作者排序。你可以加入pre_get_posts 这样做。

<?php
add_action(\'pre_get_posts\', \'wpse56168_order_author\');
/**
 * Change the order of posts only on the category pages.
 *
 * @param   WP_Query $q The current WP_Query object
 * @author  Christopher Davis <http://christopherdavis.me>
 * @return  void
 */
function wpse56168_order_author($q)
{
    if($q->is_main_query() && $q->is_category())
    {
        $q->set(\'orderby\', \'author\');
        $q->set(\'order\', \'ASC\'); // alphabetical, ascending
    }
}
现在to get a list of authors.

自从WP_Query 一次获取所有帖子--它不会流式传输数据--您可以array_map 获取作者ID并创建列表的帖子。因为你改变了上面帖子的顺序,作者应该按顺序出来。将其包装到函数中可能是一个好主意:

<?php
/**
 * Extract the authors from a WP_Query object.
 *
 * @param   WP_Query $q
 * @return  array An array of WP_User objects.
 */
function wpse56168_extract_authors(WP_Query $q)
{
    // this is PHP 5.3+, you\'ll have to use a named function with PHP < 5.3
    $authors = array_map(function($p) {
        return isset($p->post_author) ? $p->post_author : 0;
    }, $q->posts);

    return get_users(array(
        \'include\'   => array_unique($authors),
    ));
}
然后你可以在你的category.php 生成列表的模板。

<ul>
<?php foreach(wpse56168_extract_authors($wp_query) as $author): ?>
    <li><?php echo esc_html($author->display_name); ?></li>
<?php endforeach; ?>
</ul>
按作者对文章进行分组只需将以前的文章作者与当前的文章作者进行比较即可。

示例:

<?php
$old_author = 0;
while(have_posts()): the_post();
?>
    <?php if($post->post_author != $old_author): ?>
        <h2><?php the_author(); ?></h2>
    <?php endif; ?>

    // display post here

<?php
$old_author = $post->post_author;
endwhile;

SO网友:Gembel Intelek

按作者顺序进行查询WP\\u查询示例

$query = new WP_Query( array ( \'orderby\' => \'author\') );
或者如果使用query\\u posts

query_posts ( array ( \'orderby\' => \'author\') );

结束

相关推荐

Delist entries in the_loop

我正在尝试向我的WordPress网络添加一个退市功能。被除名的帖子不会出现在帖子列表中,但如果直接访问,仍然可以看到。我编写了一个插件,帮助编辑在作者和帖子上删除带有自定义元值的条目。因此,在公开列表中显示每篇文章之前,我需要检查两个元数据:delist-post post 元价值和delist-author user 元值。我想注册一个pre_get_posts 限制返回的筛选器get_posts() 通过设置查询的meta_query 所有物是否可以使用POST检查用户元值meta_query? 如