2017-08-12 99 views
1

我想我的過濾產品,自定義後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",它停止工作。

我做錯了什麼?

回答

0

首先,你需要總是在過濾器返回的東西的鷹鉤鼻功能

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

我沒有測試它,但它應該工作。