在边栏中显示随机作者和详细信息

时间:2013-03-18 作者:Steve

PHP新手最近决定尝试在我当前的WordPress主题中拼凑一个古怪的小“随机作者聚光灯”功能。我几乎完成了,但我遇到了一个障碍:我需要设法做到这一点,这样我的“聚光灯”将只选择有1篇或更多帖子的用户。

每个在我的博客上注册的人都会立即成为订阅者,可以直接在头版上发布新闻,但大多数人只满足于成为普通的、发布较少的成员。

如果我能随机选择一个提交了1篇或更多帖子的用户,我就只能将“聚光灯”纳入我的主题。

以下是迄今为止的代码:

<section id="sidebarAuthorSpotlight">
    <?php $users = get_users(); $id = array_rand( $users, 1 ); $user = $users[$id]; ?>
    Hey, have you met...
    <h3><a class="" href="<?php echo the_permalink(); ?>"><?php echo $user->display_name; ?></a></h3>
    <div><?php echo get_avatar( $user->ID, \'60\' ); ?></div>
    Mods: <?php echo count_user_posts($user->ID); ?>
    <?php echo $register_date = date("F d, Y", strtotime(get_the_author_meta(\'user_registered\'))); ?>
    <div class="clear"></div>
    <ol class="sidebarPosts">
        <?php $random_author_box = new WP_Query(array(\'author\' => $user->ID,\'posts_per_page\' => \'5\')); if ($random_author_box->have_posts() ) : while ($random_author_box->have_posts() ) : $random_author_box->the_post(); ?>
            <li>
                <a class="sidebarPostTitle" href="<?php echo the_permalink(); ?>"><?php echo the_title(); ?></a>
            </li>
        <?php endwhile; endif; ?>
    </ol>
    <div class="clear"></div>
</section>
理想情况下,我也希望能够将注册日期调整为“X注册Y天前”,但我很乐意以后再过桥。目前,我迫切需要获得上面的代码来过滤出0个帖子的用户,并且只拉1个或更多帖子的用户,或者更确切地说,拉一个用户。

如果有人能帮忙,我将万分感激。作为一个现在才开始学习PHP基础知识的人,我可以诚实地说,我现在已经不知所措了。我期待着收到你们的来信,并感谢你们每一位阅读和了解我的困境。我有祸了!

编辑:我真傻!我可能应该解释一下上面的代码做了什么:上面的代码确实显示了一个随机用户,并在侧边栏中为他们提供了一个“聚光灯”区域,但即使帖子数为0,它也会吸引用户。如前所述:如果它只吸引帖子数为1或更多的用户,那么它将近乎完美。

1 个回复
SO网友:Bainternet

您最好的选择是获得一个随机的帖子作者,这是一个用户ID,因此这里有一个函数可以实现这一点:

function get_random_author_wpa91320(){
    global $wpdb;
    $id = $wpdb->get_var("
        SELECT post_author
        FROM $wpdb->posts
        WHERE post_type = \'post\'
        AND post_status = \'publish\'
        ORDER BY RAND()
        LIMIT 1
        ");
    return $id;
}
一旦你在主题的功能中有了这个功能。php文件可以替换此行:

<?php $users = get_users(); $id = array_rand( $users, 1 ); $user = $users[$id]; ?>

<?php $user = get_user_by(\'id\', get_random_author_wpa91320() ); ?>

Update

这是一个修改后的版本,用于从数据库中获取所有至少拥有post和使用PHP的用户rand 返回随机id

function get_random_author_wpa91320_2(){
    global $wpdb;
    //this will get all users with posts
    $ids = $wpdb->get_col("
        SELECT DISTINCT post_author
        FROM $wpdb->posts
        WHERE post_type = \'post\'
        AND post_status = \'publish\'
        "
    );
    return $ids[rand(0,count($ids) -1)];
}
这种方式就像你只计算每个用户一次,而不是根据他拥有的帖子编号。

结束

相关推荐

Query posts from current year

我不太明白为什么这不管用。我试图使用以下内容在首页上仅显示当年的帖子:<?php query_posts( \"&year=$current_year&order=DESC\"); ?> 但它仍然显示2012年的帖子(它们实际上不是2012年发布的,但我将发布日期设置为其中一篇帖子,显示日期为去年2月)根据文件,我应该这样做。有人能解释一下吗?谢谢