为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文件或也以任何插件文件。

我没有测试它,但它应该工作。