Wordpress:通过分类术语的自定义元数据(元字段)进行cutom查询

时间:2017-06-14 07:40:17

标签: wordpress

我有自定义帖子类型“成员”,其中包含自定义分类“member_category”。在这个分类中,我有一个名为“display”的自定义字段(作为元数据)。

现在我想查询数据库中的成员,并且只接收具有元数据“display”的分类法的成员,其值为“1”。

我的尝试是:

$args = array(
'post_type' => 'member',
'tax_query' => array(
        array(
            'taxonomy' => 'member_category',
            'value' => '1',
            'field' => 'term_meta[display]' (????)
            'operator' => 'LIKE'
    )
));
$query = new WP_Query($args);

但它不起作用。 任何的想法?也许我应该使用SQL查询?如果是这样,我应该写哪个$wpdb查询?

由于

2 个答案:

答案 0 :(得分:0)

您不需要使用SQL查询。如果要查询元数据,则需要使用元查询。

$args = array(
'post_type' => 'member',
'meta_query' => array(
    array(
        'key'   => 'display',
        'value' => '1',
    )
));

在您的args上,您拥有税务查询的所有内容,这就是为什么它不起作用。

答案 1 :(得分:0)

您应首先获取具有所需元数值的字词,如下所示:

$term_args = array('taxonomy' => 'member_category');
$terms = get_terms( $term_args );
$term_ids = array();
if ( ! empty( $terms ) && ! is_wp_error( $terms ) )
{
    foreach( $terms as $term ) 
    {
        $val = get_term_meta( $term->term_id, 'display', true);
        if( $val == '1' ) {
            // push the ID into the array
            $term_ids[] = $term->ID;
        }
    }
}

然后在tax_query上传递组合ID,如下所示:

$args = array('post_type' => 'member');
$tax_query = array();
if(sizeof($term_ids))
{
    $tax_query = array(
                        'relation' => 'AND',
                         array(
                              'taxonomy' => 'member_category',
                              'field'    => 'ID',
                              'terms'    => $term_ids,
                               'operator' => 'IN',
                               )
                      );
}
if(sizeof($tax_query))
    $args['tax_query'] = $tax_query;