我有自定义帖子类型“成员”,其中包含自定义分类“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
查询?
由于
答案 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;