2013-08-23 7 views
22

Đã giải quyết: Xem câu trả lời bên dưới.meta_query, làm thế nào để tìm kiếm bằng cách sử dụng cả hai quan hệ OR & AND?


Tôi có loại bài đăng tùy chỉnh, SÁCH. Nó có một số lĩnh vực tùy chỉnh, cụ thể là; TITLE, AUTHOR, GENRE, RATING. Làm cách nào để sửa mã meta_query của tôi bên dưới để chỉ những sách có từ tìm kiếm trong trường tùy chỉnh; tiêu đề, tác giả, thể loại; VỚI CHÍNH XÁC xếp hạng được chỉ định trong biểu mẫu tìm kiếm của tôi, được hiển thị trong kết quả?

Tôi đã tạo biểu mẫu tìm kiếm tùy chỉnh; một vùng văn bản sẽ tìm kiếm thông qua tiêu đề, tác giả và thể loại; và một menu thả xuống sẽ tìm kiếm xếp hạng. Meta_query tôi đã thực hiện bên dưới chỉ các tìm kiếm thông qua tiêu đề, tác giả và thể loại. Nhưng tôi bây giờ stumped trong cách thêm mã cho các đánh giá.

Đây là cách tôi tưởng tượng trực quan nó với mối quan hệ meta_query: (tiêu đề hoặc tác giả hoặc thể loại) VÀ giá

$args = array(
     'relation' => 'OR', 
      array(
      'key' => 'title', 
      'value' => $searchvalue, 
      'compare' => 'LIKE' 
     ); 
      array(
      'key' => 'author', 
      'value' => $searchvalue, 
      'compare' => 'LIKE' 
     ); 
      array(
      'key' => 'genre', 
      'value' => $searchvalue, 
      'compare' => 'LIKE' 
     ); 
), 
     array(
     'relation' => 'AND', 
      array(
      'key' => 'rating', 
      'value' => $ratingvalue, 
      'compare' => '=', 
      'type' => 'NUMERIC' 
     )); 

Tôi vô cùng sẽ đánh giá cao sự giúp đỡ và tư vấn của bạn.

+0

xin vui lòng xem liên kết http://wordpress.stackexchange.com/questions/35683/meta-query-with-and-or http://codex.wordpress.org/Class_Reference/WP_Meta_Query –

+0

Cảm ơn! Vì vậy, nếu tôi không thể làm điều đó với meta_query, có cách nào khác làm thế nào tôi có thể làm điều đó? –

+0

một số ví dụ xác định ngày cuối cùng trên liên kết này. http://codex.wordpress.org/Class_Reference/WP_Meta_Query –

Trả lời

36

Tôi đã tìm thấy giải pháp với một số trợ giúp. Mã bên dưới hoạt động hoàn hảo.

$args => array(
     'relation' => 'AND', 
     array(
      'relation' => 'OR', 
      array(
       'key' => 'title', 
       'value' => $searchvalue, 
       'compare' => 'LIKE' 
      ), 
      array(
       'key' => 'author', 
       'value' => $searchvalue, 
       'compare' => 'LIKE' 
      ), 
      array(
       'key' => 'genre', 
       'value' => $searchvalue, 
       'compare' => 'LIKE' 
      ) 
     ), 
     array(
      'key' => 'rating', 
      'value' => $ratingvalue, 
      'compare' => '=', 
      'type' => 'NUMERIC' 

     ) 
    ) 
); 
+2

Điều này không hoạt động - nó không được WP_Meta_Query hỗ trợ. Xem http://wordpress.stackexchange.com/questions/75079/nested-meta-query-with-multiple-relation-keys – markd

+0

Có, nó thực sự không hoạt động. Cần một giải pháp lâu dài để sử dụng cả hai mối quan hệ. Điều này là rất cần thiết. –

+3

Trong WP 4.1, các truy vấn meta lồng nhau như câu trả lời này giờ đây hoạt động, thông tin thêm tại đây: https://make.wordpress.org/core/2014/10/20/update-on-query-improvements-in-4-1/ – mfink

1

Sau một chút thử và lỗi, tôi tìm giải pháp cho điều này. Điều này là hợp lý, tôi có nghĩa là meta_query không hỗ trợ mảng cho trường "key", nhưng cho mảng trong "key", tôi nhận được giải pháp hoàn hảo. Tôi nghe có vẻ điên rồ nhưng nó hoạt động như sự quyến rũ.

$args => array(
    'relation' => 'AND', 
    array(
     'key' => array('title','author','genre',), 
     'value' => $searchvalue, 
     'compare' => '=' 
    ), 
    array(
     'key' => 'rating', 
     'value' => $ratingvalue, 
     'compare' => '=', 
     'type' => 'NUMERIC' 

    ) 
) 

Bạn chỉ nhận được cảnh báo cho "cắt()" khi chúng tôi chuyển mảng thay vì chuỗi. Ngăn chặn cảnh báo đó hoặc Vui lòng thêm điều gì đó nếu bạn tìm thấy giải pháp tốt hơn.

+0

Tôi đã sử dụng khóa này => array() hack, tuy nhiên trong WP 4.1 nó dường như không còn được hỗ trợ 'không chính thức'. May mắn là bản cập nhật 4.1 cho meta_query giờ đây cho phép câu trả lời được chọn hoạt động đúng. – mfink