根据最后一篇文章的日期排除作者

时间:2012-11-12 作者:Dustin J

我的博客有几个作家,从经常写到一次性写。在我的作者页面上,我想把6个月内没有发表过文章的作者分开。然后,最好将这些作者输出到不同的部分,如“以前的作者”或当前其他作者列表之后的内容。

现在,代码只是循环遍历所有作者并将他们全部显示在一起,所以我想根据他们上一次发布文章的时间添加此排除项。

欢迎提供具体的代码帮助,因为我对PHP或Wordpress不太熟悉。

Example of code:

$authors = get_users(\'orderby=post_count&order=DSC&role=contributor\'); ?>
<h4 style="padding-top:20px;">Writers</h4>
<?php
// Loop through all the users, printing all of their posts as we go
foreach ( $authors as $author ) { ?>
            <a name="<?php echo $author->user_nicename; ?>"></a>
            <div class="author-posts-wrapper" id="author-<?php echo $author->ID; ?>-posts-wrapper">
                <div class="author-avatar" id="author-<?php echo $author->ID; ?>-avatar">
                    <?php echo get_avatar( $author->ID, 96 ); ?>
                </div>
                <div class="author-posts" id="author-<?php echo $author->ID; ?>-posts">
                    <h2><a href="<?php echo get_author_posts_url( $author->ID ); ?>"><?php echo $author->display_name; ?></a></h2>
    <?php
    // Set up a Loop, querying for all of the current user\'s posts
    $args = array( \'author\' => $author->ID, \'posts_per_page\' => 1 );
    $posts = query_posts($args);
    // Now that we have the posts, simulate a Loop here
    if ( have_posts() ) : ?>
                <ul class="author-post-list" id="author-<?php echo $author->ID; ?>-post-list">
        <?php while ( have_posts() ) : the_post(); // Print whatever we want for each post ?>
        Output something about each writer here.
        <?php endwhile; ?>
                </ul><!-- #author-post-list -->
    <?php else: ?>
           <p style="font-style:italic;">This author has not yet published any posts</p>
    <?php endif; ?>
如果您想查看完整代码,则会生成作者页面using this code.

1 个回复
SO网友:s_ha_dum

据我所知,没有为用户保存“上次发布”值。您可以通过引用post_date*_posts 表中的作者数据*_users*_usermeta. 考虑到这一点,我可以想出几种解决方案。

第一种解决方案:

拉住你的作者。你以后需要这个post_date 对于每个作者

您正在调出所有已发布的帖子。这可能是一个非常沉重、速度很慢的页面,甚至可能超时或内存不足。好处是,您现有的代码也拉取了所有已发布的帖子,但这样做需要使用更多的数据库查询,这通常比一个大查询更糟糕,但并不总是比一个大查询更糟糕

另一种解决方案是运行一个查询以获取每个用户ID的最新帖子,使用该查询对作者数据进行排序,然后使用现有代码打印它们。我相信您需要为该查询编写SQL。我不认为有什么内在原因可以做到这一点。它可能没有第一个解决方案那么多内存问题,但它正在向您已有的几个查询中添加一个查询。

第三种解决方案:

另一个解决方案是循环浏览您的帖子,并在*_usermeta 对于每个作者。每当发布日期更改或发布帖子时,您都必须更新此内容。然后可以使用get_users 按“上次发布”字段排序。这比前面的解决方案更有效,但更复杂。它仍然需要多次访问数据库。

正如您所想象的,这些解决方案都有相当多的代码和调试时间。抱歉没有提供。我认为,如果不真正实现几个解决方案并对其进行调试,我就无法正确地完成它。

也许是另一种选择:

您可能会考虑的另一件事是,通过not 在同一页上打印所有作者的帖子,因为这实际上等于在同一页上打印所有已发布的帖子加上排序开销。例如,如果需要,可以打印按最后一次发布日期排序的作者“索引”页面,其中包含指向作者详细信息页面的链接,该页面上有文章(这与默认情况非常相似,作者显示在“/作者/作者名”)。

此外,您不应该使用query_posts. 它会重击主查询。使用get_posts 相反

结束

相关推荐

Added if statement to loop

我想给我的循环添加一个功能。与自定义post类型一起使用的php。然而,我不想让它显示在所有帖子上,只想显示那些自定义帖子类型的帖子(比如它被称为“review”)。有没有办法说如果post type=review,那么显示这个新部分,否则隐藏?我试过使用<?php if( get_post_type() == \'reviews\' ) 但我不知道如何将else语句表述为什么都不做,然后正常继续。非常感谢。