2016-01-21 58 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);