按用户ID、帖子类型和帖子状态统计用户帖子

时间:2012-02-26 作者:prionkor

我想做的是修改codex上的这个函数http://codex.wordpress.org/Function_Reference/count_user_posts 检查标题adding post type support 页面底部。功能是:

function count_user_posts_by_type($userid, $post_type=\'post\') {
  global $wpdb;
  $where = get_posts_by_author_sql($post_type, TRUE, $userid);
  $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
  return apply_filters(\'get_usernumposts\', $count, $userid);
}
我想要的是将post状态添加到函数中。因此,我假设我必须在查询中添加一个WHERE,但不确定如何进行。任何帮助都将不胜感激。

谢谢

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

这里有一个快速的解决方案,可以通过任何类型的筛选获得帖子数量

function custom_get_user_posts_count($user_id,$args );  
    $args[\'author\'] = $user;
    $args[\'fields\'] = \'ids\';
    $ps = get_posts($args);
    return count($ps);
}
由于此函数使用get_posts 您可以筛选和使用任何可以使用的内容WP_Query

因此,在您的情况下,您可以这样使用它:

$count = custom_get_user_posts_count($user_id, array(
    \'post_type\' =>\'post\',
    \'post_status\'=> \'draft\'
));

SO网友:Stephen Harris

这是我编写的一个自定义函数,它允许您按特定作者的帖子类型和帖子状态进行查询。您可能需要小心传递的参数,因为它可能包括自动草稿和修订。。。

以下内容改编自get_posts_by_author_sql

function my_count_posts_by_user($post_author=null,$post_type=array(),$post_status=array()) {
    global $wpdb;

    if(empty($post_author))
        return 0;

    $post_status = (array) $post_status;
    $post_type = (array) $post_type;

    $sql = $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND ", $post_author );

    //Post status
    if(!empty($post_status)){
        $argtype = array_fill(0, count($post_status), \'%s\');
        $where = "(post_status=".implode( " OR post_status=", $argtype).\') AND \';
        $sql .= $wpdb->prepare($where,$post_status);
    }

    //Post type
    if(!empty($post_type)){
        $argtype = array_fill(0, count($post_type), \'%s\');
        $where = "(post_type=".implode( " OR post_type=", $argtype).\') AND \';
        $sql .= $wpdb->prepare($where,$post_type);
    }

    $sql .=\'1=1\';
    $count = $wpdb->get_var($sql);
    return $count;
} 

结束