2015-02-06 4 views
0

현재 Woocommerce를 사용하여 WordPress 웹 사이트에 대한 사용자 지정 고급 검색 기능을 구축하고 있습니다.WooCommerce는 WP_Query를 사용하여 가격대를 검색합니다.

  • 카테고리 내 현재 진행 상황은 다음과 연결되어

  • 최소/최대 가격 : 당신은 필터를 사용하여 검색 할 수 있어야한다. 이렇게하면 URL 매개 변수에 범주 슬러그를 지정할 수 있습니다. 당신이 범주에 대해 검색하는 당신이 가격을 검색해야 할 때이 방법이 더 복잡해진다 보인다 때이 위대한 작품을하면서 지금

    /** 
    * Default arguments 
    * @var array 
    */ 
    
        $query = array(
         'post_status' => 'publish', 
         'post_type' => 'product', 
         'posts_per_page' => 10, 
        ); 
    
    /** 
    * Category search 
    */ 
    
        if(isset($_GET['categories']) && $_GET['categories']) { 
         /** 
         * Comma seperated --- explode 
         * @var [type] 
         */ 
    
          $categories = explode(',', $_GET['categories']); 
    
         /** 
         * Add "or" parameter 
         */ 
    
          $query['tax_query']['relation'] = 'OR'; 
    
         /** 
         * Add terms 
         */ 
    
          foreach($categories as $category) { 
           $query['tax_query'][] = array(
             'taxonomy' => 'product_cat', 
             'field' => 'slug', 
             'terms' => $category, 
            ); 
          } 
        } 
    /** 
    * Fetch 
    */ 
    
        $wp_query = new WP_Query($query); 
    

    : 일치하는 게시물이 될 것입니다 반환.

    원시 SQL에서 다음과 같이 작동합니다 :

    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 = '_price' AND meta_value BETWEEN 200 AND 1000 
    

    내가이 사용 WP_Query을 구현할 수있는 방법을 모른다.

  • 답변

    3

    WP_Query (또는 get_posts)를 사용하는 동안 여러 개의 meta_queries를 결합 할 수 있습니다 (사용법에 덜 관대 함).

    http://codex.wordpress.org/Class_Reference/WP_Meta_Query

    http://codex.wordpress.org/Class_Reference/WP_Query

    $myposts = get_posts(
        array(
         'post_type' => array('product', 'product_variation'), 
         'meta_query' => array(
          array(
           'key' => '_price', 
           'value' => '200', 
           'compare' => '>=' 
          ), 
          array(
           'key' => '_price', 
           'value' => '2000', 
           'compare' => '<=' 
          ) 
         ) 
        ) 
    ); 
    
    2

    처럼 @Niels 반 Renselaar에서 영감 솔루션을 뭔가를 수행하여 그들을 결합하지만, 더 깨끗하게 할 수

    $query = array(
        'post_status' => 'publish', 
        'post_type' => 'product', 
        'posts_per_page' => 10, 
        'meta_query' => array(
         array(
          'key' => '_price', 
          'value' => array(50, 100), 
          'compare' => 'BETWEEN', 
          'type' => 'NUMERIC' 
         ) 
        ) 
    ); 
    
    $wpquery = WP_Query($query); // return 10 products within the price range 50 - 100 
    
    +0

    아, offcourse .. :) –

    2

    woocom 내부에서 작업하는 경우 WC 후크를 사용할 수있을 때 머세 루프

    add_action('woocommerce_product_query', 'example_product_query_price'); 
    
    function example_product_query_price ($q) { 
        $meta_query = $q->get('meta_query'); 
    
        $meta_query[] = array(
         'key'  => '_regular_price', 
         'value' => array(
          300000 , 
          900000 
         ), 
         'compare' => 'BETWEEN', 
         'type'=> 'NUMERIC' 
        ); 
    
        $q->set('meta_query', $meta_query); 
    } 
    
    +0

    감사합니다. 그것은 나를 위해 작동합니다. –