我在这里摔倒了。通过本网站上的帖子,我设法在WordPress中创建了一个自定义分类档案页面。现在我正在尝试为其添加动态复选框过滤器,但我似乎无法使meta_query正常工作。
这行代码就像我希望的那样工作;
$query = array(
'post_type' => 'company',
'posts_per_page' => 999,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'company_category',
'field' => 'slug',
'terms' => $al_cat_slug
)
),
'meta_query' => array (
array (
'key' => 'company_method',
'value' => 'Online',
'compare' => 'LIKE',
)
)
);
然而,这个不会:
$query = array(
'post_type' => 'company',
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'company_category',
'field' => 'slug',
'terms' => $al_cat_slug
)
),
);
$al_tax_post_qry = new WP_Query($query);
$meta_query = $al_tax_post_qry->get('meta_query');
$name = 'company_method';
$value = explode(',', $_GET[ $name ]);
$meta_query[] = array(
'key' => $name,
'value' => $value,
'compare' => 'LIKE',
);
$al_tax_post_qry->set('meta_query', $meta_query);
无论我在URL中输入什么,它都会不断查找所有结果,并且不会像第一个那样过滤。 print_r($ meta_query);给了我:
Array ( [0] => Array ( [key] => company_method [value] => Array ( [0] => Online ) [compare] => LIKE ) )
编辑07-06-2016 // 09:00 在阅读说明我应该使用'IN'的评论后,我进行了一些进一步的实验,当我使用它与查询本身时,它根本没有给我任何结果。似乎'IN'是问题所在。 我正在查询的字段是“高级自定义字段”字段,因此可能与它有关?但是,他们网站上的示例也使用相同的方法。
不工作:
$query = array(
'post_type' => 'company',
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'company_category',
'field' => 'slug',
'terms' => $al_cat_slug
)
),
'meta_query' => array (
'relation' => 'AND',
array (
'key' => 'company_method',
'value' => array('online', 'orange', 'apple'),
'compare' => 'IN',
)
),
);
工作:
$query = array(
'post_type' => 'company',
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'company_category',
'field' => 'slug',
'terms' => $al_cat_slug
)
),
'meta_query' => array (
'relation' => 'AND',
array (
'key' => 'company_method',
'value' => 'online',
'compare' => 'LIKE',
)
),
);
我可以选择在meta_query中为数组中的每个值创建一个数组条目,但这可能不太理想。
答案 0 :(得分:1)
如果您将$ meta_query value
定义为数组,则应更改compare
运算符。 IN
和NOT IN
是特定于数组的。
试试这个:
$meta_query[] = array(
'key' => $name,
'value' => $value,
'compare' => 'IN',
);
希望它有所帮助!
答案 1 :(得分:0)
在这篇文章的帮助下,问题解决了!值以序列化方式存储,因此需要一些不同的方法。 https://wordpress.stackexchange.com/questions/183182/meta-query-compare-in-not-working