问题描述

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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。