2016-01-21 90 views
1

我想要做我自己的自定義搜索,看看元鍵和帖子標題。Wordpress元鍵搜索結合使用WP查詢的帖子標題搜索

我目前的代碼不會將結果限制爲分配的類別(由於查詢中的OR)。然而,通過使它AND然後搜索元鍵停止工作,除非單詞在標題中。

有沒有一種方法可以搜索標題和元鍵並仍然將其限制爲該類別?

編輯:只是爲了澄清, 搜索即時希望做的是以下幾點:

搜索搜索詞無論是在這些元字段,或在文章標題,但所有的結果必須在該類別中。

    function search_title_filter($where, &$wp_query) { 
         global $wpdb; 
         if ($search_title = $_GET['search-in-main-category']) { 
          $where .= ' OR ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql($wpdb->esc_like($search_title)) . '%\''; 
         } 

         return $where; 
        } 

        if(isset($_GET['search-in-main-category'])) { 

         add_filter('posts_where', 'search_title_filter', 10, 2); 
         $search_key = $_GET['search-in-main-category']; 
         $query_args = array(
          'meta_query' => array(
           'relation' => 'OR', 
           array(
            'key' => 'course_overview', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           ), 
          array(
           'key' => 'intended_audience', 
           'value' => $search_key, 
           'compare' => 'LIKE', 
          ), 
           array(
            'key' => 'method_of_delivery', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           ), 
           array(
            'key' => 'course_content/agenda', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           )), 
          'product_cat' => $current_cat_slug, 
          'posts_per_page' => 50 
          ); 
         $search_query = new WP_Query($query_args); 

回答

0

你的問題有點不清楚,你提到category在wp_query的關係設置?事實並非如此,除非它實際上稱爲product_cat,否則即使正確它已被折舊(請參閱下面的tax_query)

我最近的猜測是你問的如何關係的元查詢字段,內容如下內結合:

'meta_query' => array(
     'relation' => 'OR', 
     array(
      'key' => 'course_overview', 
      'value' => $search_key, 
      'compare' => 'LIKE', 
     ), 
     array(
      'key' => 'intended_audience', 
      'value' => $search_key, 
      'compare' => 'LIKE', 
     ), 
     array(
       'relation' => 'AND', 
       array(
        'key' => 'method_of_delivery', 
        'value' => $search_key, 
        'compare' => 'LIKE', 
       ), 
       array(
        'key' => 'course_content/agenda', 
        'value' => $search_key, 
        'compare' => 'LIKE', 
       ) 
     ), 


    ), 

正如你可以看到有指定的新陣列的AND關係。

至於類別你有兩種不同類型,一種是內置類別分類,你可以使用cat =類別的ID,category_name這是slu name名稱。你可以看到codex的例子。

的自定義分類是爲自己的分類標準(產品沒有一個內置分類。您可以使用tax_query這是類似於meta_query

'tax_query' => array(
    array(
     'taxonomy' => 'product', 
     'field' => 'slug', 
     'terms' => 'phpcourse', 
    ), 
), 
+0

嗨,感謝您的回答,對不起,當我的意思是'OR'我的意思是在我的代碼中的功能搜索過濾器。我可能應該提到我使用woocommerce,因此'product_cat',但感謝那個信息無論如何有用 – Adrian

0

我通過添加更多的代碼到我的自定義SQL解決這一點。在。只有這樣,我能得到所需的變量函數使用全局變量

    global $current_cat; 
        $current_cat = $current_cat_id; 
        function search_title_filter($where, &$wp_query) { 
         global $wpdb; 
         global $current_cat; 
         if ($search_title = $_GET['search-in-main-category']) { 
          $where .= ' OR ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql($wpdb->esc_like($search_title)) . '%\' 
          AND '.$wpdb->term_relationships.'.term_taxonomy_id = '.$current_cat; 
         } 

         return $where; 
        } 
0

你最終的查詢會是這樣:

      $query_args = array(
          'tax_query' => array(
            array(
           'taxonomy' => 'product', 
           'field' => 'slug', 
           'terms' => 'phpcourse', 
            ), 
          ), 
          'meta_query' => array(
           'relation' => 'OR', 
           array(
            'key' => 'course_overview', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           ), 
          array(
           'key' => 'intended_audience', 
           'value' => $search_key, 
           'compare' => 'LIKE', 
          ), 
           array(
            'key' => 'method_of_delivery', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           ), 
           array(
            'key' => 'course_content/agenda', 
            'value' => $search_key, 
            'compare' => 'LIKE', 
           )), 
          'product_cat' => $current_cat_slug, 
          'posts_per_page' => 50 
          ); 
         $search_query = new 

         WP_Query($query_args);