2014-10-22 29 views
0

我改變woocommerce核心查詢,並試圖基於自定義查詢字符串pro_type_sws展示產品= 32如何激活價格過濾woocommerce沒有通過MIN_PRICE和MAX_PRICE URL

現在,當我提供整個查詢字符串它的工作原理

WP /?MIN_PRICE = 35 & MAX_PRICE = 120 & post_type =產品& pro_type_sws = 32

但是當我只使用

localhost/wp /?post_type = product & pro_type_sws = 32

它不工作,我不知道如何激活價格過濾器代碼,而不使用小部件過濾器按鈕。

總之我想在產品頁面上應用過濾器,因此它只顯示那些與woocommerce的自定義產品數據類型相關的產品。

代碼中更改:類-WC-query.php

if ((isset($_GET['max_price']) && isset($_GET['min_price'])) or isset($_GET['pro_type_sws'])) { 


     $matched_products = array(); 
     $min = floatval($_GET['min_price']); 
     $max = floatval($_GET['max_price']); 
      $pro_type = $_GET['pro_type_sws']; 

      /* 
       Applying Filter based on product type query string 
      * If Product type query string set then render only those products which are related to given product data type. 
      */ 
      if (isset($pro_type)){ 
       // Query Update : Product type based filter applied through $pro_type query string 
       $matched_products_query = apply_filters('woocommerce_price_filter_results', $wpdb->get_results($wpdb->prepare(" 
      SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts 
      INNER JOIN $wpdb->postmeta ON ID = post_id 
          LEFT JOIN wp_term_relationships AS rel ON object_id = post_id 
      WHERE post_type IN ('product', 'product_variation') AND post_status = 'publish' AND meta_key = %s AND meta_value BETWEEN %d AND %d AND rel.term_taxonomy_id = %d 
     ", '_price', $min, $max, $pro_type), OBJECT_K), $min, $max); 

      } 
      else{ 
       $matched_products_query = apply_filters('woocommerce_price_filter_results', $wpdb->get_results($wpdb->prepare(" 
      SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts 
      INNER JOIN $wpdb->postmeta ON ID = post_id 
      WHERE post_type IN ('product', 'product_variation') AND post_status = 'publish' AND meta_key = %s AND meta_value BETWEEN %d AND %d 
     ", '_price', $min, $max), OBJECT_K), $min, $max); 

      } 


     if ($matched_products_query) { 
      foreach ($matched_products_query as $product) { 
       if ($product->post_type == 'product') 
        $matched_products[] = $product->ID; 
       if ($product->post_parent > 0 && ! in_array($product->post_parent, $matched_products)) 
        $matched_products[] = $product->post_parent; 
      } 
     } 
+0

我們可以看到您的自定義查詢代碼? – rnevius 2014-10-22 08:37:54

+0

@rnevius請檢查現在,但只有當我通過完整的URL,但有其他任何合適的方式,所以我可以使用localhost/wp /?post_type = product&pro_type_sws = 32 SO,我只是通過pro_type_sws = 32 querystring和價格過濾器激活 – Bilal 2014-10-22 08:55:22

回答

1

更改核心文件是不是一個好主意,在每次更新(和廁所每年有很多),你必須申請您的mods再次。

嘗試掛鉤相同的過濾器(上一個自定義插件或主題的functions.php),做你的東西:

add_filter('loop_shop_post_in', function(){ 
    if (
     (isset($_GET['max_price']) && isset($_GET['min_price'])) 
     or isset($_GET['pro_type_sws']) 
    ){ 
     // do your thing 
     // adjust the issets to integrate to WC behavior 
     // etc 
    } 
}); 
+0

你可以讓它多填一點,這樣我就可以知道如何將參數傳遞給問題中提到的相同查詢,所以我不必更換核心。 – Bilal 2014-10-22 10:07:03

+0

我沒有任何設置,我可以測試這個。我的建議是恢復你的WC核心文件,並開始測試你的確切代碼(和變化),看看會發生什麼。 – brasofilo 2014-10-22 10:12:08

+0

任何想法或僞將參數傳遞給woo-commerce過濾器或任何鏈接來設置自定義過濾器,以便我可以細讀 – Bilal 2014-10-22 10:24:19