是否使用COUNT_USER_POSTS包括草稿或未来的帖子?

时间:2012-02-06 作者:Zach Reed

我使用下面的代码来获取用户的帖子数量,虽然效果很好,但它只包含已发布的帖子。例如,如何修改此代码或使用不同的代码使其包含“future”post\\u状态或“drafts”。

<?php
$post_count = count_user_posts($curauth->ID);
echo \'<p>User post count is \' . $post_count;
?>

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

这将满足您的需要:

$args = array(
    \'author\'      => $curauth->ID,
    \'post_status\' => array(
        \'publish\',
        \'pending\',
        \'draft\',
        \'future\'
    )
);
$posts = new WP_Query();

$post_count = $posts->found_posts;
它将包括草稿、待定帖子、已发布帖子和未来帖子。您可以设置更多内容,例如垃圾帖子和私人帖子,但这似乎并没有符合问题的意图。此方法将包括自定义帖子类型以及内置的帖子类型,因此可能需要进行额外的筛选。

文档:WP_Query

SO网友:kaiser

这可以通过自定义查询完成:确保尽早挂接查询过滤器。

注意:此解决方案的帮助仅限于上面@m0r7if3r的答案,因为查询将在过滤器之前运行。

function count_all_posts_by_user_cb( $count, $userid )
{
    global $wpdb;

    $where = $wpdb->prepare( \'WHERE post_author = %d AND post_type = %s AND \', $userid, $wpdb->posts )
    $where .= "(post_status = \'publish\'";
    // for a full list, @see http://codex.wordpress.org/Post_Status_Transitions
    foreach( array( \'private\', \'draft\', \'pending\', \'future\' ) as $status
        $where .= $wpdb->prepare( " OR post_status = \'%s\'", $status );
    $where .= ")";

    $result = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );

    return $result;
}
add_filter( \'get_usernumposts\', \'count_all_posts_by_user_cb\', 20, 2 );
注意:筛选器将影响对的所有调用count_user_posts();. 如果您不想这样做,那么您必须检查过滤器cb fn内部,用户是否有特定的角色或ID,或者您需要的任何限制。

结束

相关推荐