问题描述
PHP 新手在这里,最近决定把一个刺激的小巧的 「随机作者聚焦」 功能拼凑在我当前的 WordPress 主题。我几乎完成了,但是我遇到了一些障碍:我需要以某种方式使它成为可能,我的’spotlight’ 只能选择 1 个帖子或更多的用户。
在我的博客上注册的所有人都立即成为订阅者,并且可以直接在首页上发布新闻,但大多数内容只是常规的,post-less 会员。
我可以把’spotlight’ 加入我的主题,如果我可以随机选择已经提交了 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 天前注册的」,但我很高兴在稍后时间过桥。目前,我迫切需要获得上述代码,以过滤掉 0 个帖子的用户,并且只能使用 1 个或更多帖子的用户 (或用户) 。
如果有人能帮忙,我会非常感激。作为现在只是开始学习 PHP 基础的人,我可以坦白地说,在这一点上我已经超越了我的头脑。我期待着你的回音,感谢各位的阅读和看我的困境。祸是我!
编辑:我很傻!我应该可以解释上面的代码是做什么的:上面的代码确实显示一个随机的用户,并在侧边栏中提供一个’spotlight’ 区域,但是即使使用了一个帖子数为 0,它也会拉到用户。如上所述拉取只有 1 位或更多的帖子数的用户,就会是 near-flawless 。
最佳解决方案
你最好的选择是获得一个随机的作者,这是一个用户 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;
}
一旦你的主题的 functions.php 文件中有这个功能,你可以替换这一行:
<?php $users = get_users(); $id = array_rand( $users, 1 ); $user = $users[$id]; ?>
同
<?php $user = get_user_by('id', get_random_author_wpa91320() ); ?>
更新
这是一个修改版本,从数据库的所有用户至少有发布和使用 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)];
}
这样就像你一次对每个用户进行计数,而不是根据他拥有的职位号码。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。