如何修改此wpdb查询以包括POST_STATUS为PUBLISH和DRAFT的帖子?

时间:2011-08-23 作者:Andrew

我使用下面的函数来计算作者从自定义帖子类型中发表的帖子数量。

<?php
function count_user_posts_by_type($userid, $post_type) {
    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);
}
?>  
以呼应我使用的计数

<?php echo count_user_posts_by_type(wp_get_current_user()->ID, \'custom_post_type_name\'); ?>
从我的测试来看,似乎只有post_status 属于publish. 如何修改该函数,使其同时统计draft ?

我尝试如下修改查询,但似乎没有任何效果:

$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where AND post_status IN (\'publish\',\'draft\')" );

2 个回复
SO网友:Tomas Buteler

您可以使用ANDOR MySQL中的语句。试试这个:

$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where AND (post_status = \'publish\' OR post_status = \'draft\')" );

SO网友:Steven

您可以尝试以下操作:

$querystr = "
    SELECT COUNT(*)  
    FROM $wpdb->posts
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
    AND $wpdb->posts.post_status = \'draft\' 
    AND $wpdb->posts.post_type = \'post\'
    ORDER BY $wpdb->posts.post_date DESC
 ";

$pageposts = $wpdb->get_results($querystr, OBJECT);
只需修改查询即可检索当前用户的帖子。

结束

相关推荐

$wpdb->Prepare不创建我可以多次执行的预准备语句吗?

我在想语法$sql = $wpdb->prepare( \'query\' [, value_parameter, value_parameter ... ] ) 看起来(从prepare中的语法-值来看),它只是简单地转义值,而不是创建一个prepared语句,当我多次执行它时,它会给我带来性能上的好处,不同的参数会吗?在第二次查看时,由于值是可选的,所以我可以在准备后设置它们?我该怎么做?