返回拥有一篇或多篇已发布博客文章的所有用户

时间:2019-06-12 作者:Matthew Brown aka Lord Matt

我正在开发一个插件,我需要为其创建一个包含所有拥有一个或多个发布博客帖子的用户(名称和ID)的数组。

查看文档get_users() 对于此特定需求,它似乎没有arg值。

如何获取此数据?

3 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

对此有一个论点,并且有记录在案。如果你看the documentation for get_users() is说:

看见WP_User_Query::prepare_query(). 有关已接受参数的详细信息。

如果遵循该链接,您将看到参数列表,其中之一是:

\'has_published_posts\'

(bool | array)将帖子类型数组传递给以这些帖子类型发布帖子的用户,以过滤结果。true 是所有公共帖子类型的别名。

因此,您可以像这样获得已发布的作者:

$authors = get_users( [ \'has_published_posts\' => true ] );
或者,如果您只希望发布帖子的用户:

$authors = get_users(
    [
        \'has_published_posts\' => [ \'post\' ],
    ]
);

SO网友:Bhupen

您可以在get\\u users中设置“orderby”和“who”:https://codex.wordpress.org/Function_Reference/get_users

   $usersList = get_users( \'orderby=post_count&who=authors\' );
      foreach ( $usersList as $user ) {
      echo \'<li>\' . esc_html( $user->display_name ) . \'</li>\';
  }

SO网友:chandima

您始终可以使用自定义sql查询来执行类似的操作。

function custom_query(){
    global $wpdb;
    $tbl_users = $wpdb->prefix . "users";
    $tbl_posts = $wpdb->prefix . "posts";

    $sql = "SELECT ID, user_nicename FROM $tbl_users where ID in (SELECT post_author from tbl_posts WHERE post_status=\'publish\' group by post_author);";
    $results = $wpdb->get_results($sql);

    if($results){
        foreach($results as $row){
            response[] = array($row->ID, $row->user_nicename);
        }
        return response;
    }else{
        return null;
    }
}
我已经测试了sql命令。但没有测试完整的PHP实现。但我想你知道了。

EDIT: 我添加了这个方法,只是为了表明如果你坚持做某事,你总是可以进行自定义查询。

相关推荐

如何在新用户注册时将wp_USERS->用户登录名插入到wp_Terms中?

当新用户注册时,我需要将wp\\u users->user\\u login字段插入wp\\u terms name和slug字段。我的要求是管理员需要将帖子分配给特定用户,也就是说管理员需要向user1添加帖子,但user2不应该看到这一点。为此,我创建了一个自定义帖子,并为此添加了分类法。术语是用户用户名。因此,我需要在分类法中将用户的用户名作为术语列出。当一个新用户注册时,他的用户名也应该在wp\\u terms表中更新,所以我将用户名作为terms。我在这里绊倒了。请对此提出一些解决方案