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或更多的用户,那么它将近乎完美。
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)];
}
这种方式就像你只计算每个用户一次,而不是根据他拥有的帖子编号。