meta_query 'so sánh' => 'IN' không hoạt động


13

Trước hết, tôi biết đó là một bản sao, nhưng không có câu trả lời cũ nào hữu ích.

Tôi đang tìm kiếm trong bài viết thông qua post_meta. Đây là mã của tôi, hiện không trả về gì cả.

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

Nếu tôi loại bỏ meta_querynó hoạt động. Tôi chắc chắn về những điều này:

  • Không có lỗi chính tả trong keyhoặc value.
  • loại bài là post
  • một bài đăng với giá trị 'đơn' trong 'system_power_supply'. Tuy nhiên, các trường bài được tạo bởi Trường tùy chỉnh nâng cao .

được system_power_supplynối tiếp?
Howdy_McGee

Vâng, đúng vậy. Đây là giá trị trong bảng postmeta a:1:{i:0;s:6:"single";}
Rizwan

2
đó là vấn đề của bạn, truy vấn meta sẽ không hoạt động trên dữ liệu tuần tự. nếu bạn tìm kiếm trang web này để truy vấn dữ liệu tuần tự, bạn sẽ tìm thấy một số câu trả lời, nhưng không có phương pháp nào là lý tưởng.
Milo

Câu trả lời:


13

Không có cách nào dễ dàng để tìm kiếm các giá trị nối tiếp trong một truy vấn meta. Nếu danh sách các giá trị không quá dài, có khả năng bạn có thể thiết lập nhiều truy vấn meta:

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

Hoặc nếu bạn muốn có được siêu ưa thích, bạn có thể thiết lập nó một cách linh hoạt:

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}

Cảm ơn bạn rất nhiều, người anh em. Tôi không thể nói cho bạn biết bạn đã giải quyết vấn đề đau đầu như thế nào.
Rizwan

btw, tại sao meta_value chứa dữ liệu tuần tự nếu chúng tôi không thể truy vấn thông qua meta_query? Đây có phải lỗi của wordpress không?
Rizwan

1
Tôi là phụ nữ, không phải là "bạn", nhưng không vấn đề gì. Meta_value chứa dữ liệu được tuần tự hóa do cách Trường tùy chỉnh nâng cao lưu dữ liệu. Đó không phải là lý tưởng, chắc chắn.
Jen

1
haha, tôi xin lỗi người phụ nữ của tôi Thứ hai và thứ ba hoạt động tốt, đã không thử cái đầu tiên.
Rizwan

2
bạn có thể xóa cái đầu tiên, nó không hoạt động
Toskan

3

Tôi biết đó là một thời gian dài, nhưng chỉ trong trường hợp ai đó có cùng một vấn đề. Chà, tôi đã kéo tóc hàng giờ trước khi tôi phát hiện ra vấn đề: 'meta_query' với toán tử so sánh 'IN' dường như không chấp nhận mảng thông thường. thay vào đó, bạn cần tham gia trước với ','.

Vì vậy, trong trường hợp của bạn, một cái gì đó như thế này sẽ hoạt động:

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;

Trong WP 5, bạn có thể chuyển mảng trực tiếp tới khóa giá trị. Nếu bạn mã hóa nó thành một chuỗi, bạn có thể nhận được kết quả không mong muốn liên quan đến cách wp chia chuỗi thành các phân đoạn cho IN()phần đó. Ví dụ, 'this that', 'and', 'that'trở thành 'this','that','and','that'- vì vậy dường như là tốt hơn để chỉ cho nó mảng.
Bananaapple
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.