获取具有特定自定义字段值的CPT金额

时间:2019-01-01 作者:Chris Wiese

What I try to achieve:

获取具有特定条件的CPT帖子数量。

My fields

CPT-\'usr\\U msg\'字段名-\'posted\\U user\\U id\'

My attemp

add_shortcode(\'count_usr_msg\',\'count_usr_msg\');
function count_usr_msg($atts){
    $usr_id = $atts[\'usr_id\'];
    $args = array(
        \'post_type\'              => array( \'usr_msg\' ),
        \'meta_query\'             => array(
            \'relation\' => \'AND\',
            array(
                \'key\'     => \'posted_user_id\',
                \'value\'   => $usr_id,
                \'compare\' => \'=\',
            )
        )
    );

    $usr_msg = new WP_Query( $args );

    if ($usr_msg->have_posts()) {
        $count_posts = wp_count_posts()->publish;
        return $count_posts;
    }else{
        return 0;
    }
}

The problem

如果我发布了一个有0篇文章的user\\u id,它将返回0,但当我发布一个user\\u id时has 1 or more it always returns 3.

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好吧,它返回了错误的数字,因为您完全是这样编码的;)

您的WP\\U查询正确。因此,当没有符合您条件的帖子时,您将得到0。

但如果有这样的帖子,那么。。。完全忽略查询并返回wp_count_posts 因此。。。但是

此函数返回一个对象,其属性是一个post类型的每个post状态的计数。它不计算给定查询中的帖子,在您的情况下,它不能这样做(这个函数现在应该如何计算哪个查询的帖子?)

下面是正确形式的代码:

add_shortcode(\'count_usr_msg\',\'count_usr_msg\');
function count_usr_msg($atts){
    $usr_id = $atts[\'usr_id\'];
    $args = array(
        \'post_type\'              => \'usr_msg\',
        \'meta_query\'             => array(
            array(
                \'key\'     => \'posted_user_id\',
                \'value\'   => $usr_id,
                \'compare\' => \'=\',
            )
        )
    );

    $usr_msg = new WP_Query( $args );

    return $usr_msg->found_posts;
}
我们不用检查某些条件,而是使用found_posts, 其中包含:

找到的与当前查询参数匹配的帖子总数

并将其作为值返回。