为WooCommerce产品的定制元查询过滤器
问题描述:
我想我的过滤产品,自定义后meta_key
为"_city_name"
,以及关键字"s"
与AND
操作目前我在做我的functions.php
:为WooCommerce产品的定制元查询过滤器
function my_modify_main_query($query) {
$meta_query_args = array(
'meta_query' => array(
array(
'key' => '_city_name',
'value' => 'new york',
'compare' => 'LIKE',
)
)
);
$query->set('meta_query', $meta_query_args);
}
add_filter('pre_get_posts', 'my_modify_main_query');
它的工作,如果我不在GET参数中添加关键字"s"
。
但是,如果我添加关键字"s=beer&city=newyork"
,它停止工作。
我做错了什么?
答
首先,你需要总是在过滤器返回的东西的鹰钩鼻功能:
return $query;
可能是你应该包括$_GET['city']
为'value'
这样:'value' => $_GET['city'],
代替。但您需要检查$_GET['city']
之前的值。
所以,你的代码应该是:
add_filter('pre_get_posts', 'my_modify_main_query');
function my_modify_main_query($query) {
// Checking for "city" data
if(! isset($_GET['city'])) return $query;
$meta_query_args = array(
'meta_query' => array(
array(
'key' => '_city_name',
'value' => sanitize_text_field($_GET['city']),
'compare' => 'LIKE',
)
)
);
$query->set('meta_query', $meta_query_args);
return $query; ## <==== This was missing
}
代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。
我没有测试它,但它应该工作。