我使用下面的代码来获取用户的帖子数量,虽然效果很好,但它只包含已发布的帖子。例如,如何修改此代码或使用不同的代码使其包含“future”post\\u状态或“drafts”。
<?php
$post_count = count_user_posts($curauth->ID);
echo \'<p>User post count is \' . $post_count;
?>
我使用下面的代码来获取用户的帖子数量,虽然效果很好,但它只包含已发布的帖子。例如,如何修改此代码或使用不同的代码使其包含“future”post\\u状态或“drafts”。
<?php
$post_count = count_user_posts($curauth->ID);
echo \'<p>User post count is \' . $post_count;
?>
这将满足您的需要:
$args = array(
\'author\' => $curauth->ID,
\'post_status\' => array(
\'publish\',
\'pending\',
\'draft\',
\'future\'
)
);
$posts = new WP_Query();
$post_count = $posts->found_posts;
它将包括草稿、待定帖子、已发布帖子和未来帖子。您可以设置更多内容,例如垃圾帖子和私人帖子,但这似乎并没有符合问题的意图。此方法将包括自定义帖子类型以及内置的帖子类型,因此可能需要进行额外的筛选。文档:WP_Query
这可以通过自定义查询完成:确保尽早挂接查询过滤器。
注意:此解决方案的帮助仅限于上面@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,或者您需要的任何限制。