如何列出已经编写了定制帖子类型的用户并隐藏那些没有的用户?

时间:2011-10-18 作者:any_h

我正在尝试构建一个作者列表,该列表将显示所有编写过自定义帖子类型帖子的作者,并隐藏没有帖子的作者。具有wp_list_authors 可以很容易地向有书面帖子的用户显示(而不是CPT)。

这不会显示已发布自定义帖子类型的用户,它只影响帖子。

wp_list_authors(\'hide_empty=1\');
我看了看get_users 函数,但仅使用它构建了一个列表(对列表进行更多控制,但不是我的目标)。

 $blog_url = get_bloginfo(\'home\');
 $blogusers = get_users(\'orderby=display_name&role=editor\');
 foreach ($blogusers as $user) {
    echo \'<li><a href="\' . $blog_url . \'/author/\' . $user->user_login . \'">\' . $user->display_name . \'</a></li>\';
  }
我找到了这个really nice post 处理如何在后端显示帖子计数。它定义了一个函数_yoursite_get_author_post_type_counts() 这可能会在这方面有所帮助。。。

你知道怎么做吗?谢谢!:)

1 个回复
最合适的回答,由SO网友:soulseekah 整理而成

wp_list_authors(), 内部获取仅属于类型的帖子post. 参见第294行http://core.trac.wordpress.org/browser/tags/3.2.1/wp-includes/author-template.php#L273

正如你所指出的,this 答案是伟大的,经过一些修改可以做你想要的。

function wpse31443_author_has_custom_post_type( $post_author, $post_type ) {
    global $wp_post_types; // If nonexistent post type found return
    if ( array_intersect((array)$post_type, array_keys($wp_post_types))
        != (array)$post_type ) return false;

    static $posts = NULL; // Cache the query internally
    if ( !$posts ) {
        global $wpdb;

        $sql = "SELECT `post_type`, `post_author`, COUNT(*) AS `post_count`".
            " FROM {$wpdb->posts}".
            " WHERE `post_type` NOT IN (\'revision\', \'nav_menu_item\')".
            " AND `post_status` IN (\'publish\', \'pending\')".
            " GROUP BY `post_type`, `post_author`";

        $posts = $wpdb->get_results( $sql );
    }

    foreach( $posts as $post ) {
        if ( $post->post_author == $post_author
            and in_array( $post->post_type, (array)$post_type )
            and $post->post_count ) return true;
    }

    return false;
}
你已经知道如何get_users, 因此,设置一个简单的foreach 循环并将用户ID输入到新函数中。

我已经在某种程度上测试了该函数,它应该可以正常工作,但可能需要一些调整。如果您有任何问题和/或我如何改进我的答案,请告诉我。

结束