meta_query 'bandingkan' => 'IN' tidak berfungsi

13

Pertama-tama, saya tahu ini duplikat, tetapi tidak ada jawaban yang lebih lama yang membantu.

Saya mencari di posting melalui post_meta. Ini kode saya, yang saat ini tidak mengembalikan apa pun.

$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;

Jika saya menghapusnya meta_queryberfungsi. Saya yakin akan hal-hal ini:

  • Tidak ada kesalahan ejaan dalam keyatau value.
  • jenis posting post
  • Ada adalah sebuah posting dengan nilai 'single' di 'system_power_supply'. Namun, bidang pos dihasilkan oleh Bidang Kustom Tingkat Lanjut .
Rizwan
sumber
Apakah system_power_supplyserial?
Howdy_McGee
ya itu. Inilah nilai dalam tabel postmeta a:1:{i:0;s:6:"single";}
Rizwan
2
baik itu masalah Anda, meta query tidak akan berfungsi pada data serial. jika Anda mencari situs ini untuk mencari data serial, Anda akan menemukan beberapa jawaban, tetapi tidak ada metode yang ideal.
Milo

Jawaban:

13

Tidak ada cara mudah untuk mencari nilai bersambung dalam meta query. Jika daftar nilai tidak terlalu panjang, berpotensi Anda dapat mengatur beberapa meta queri:

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

Atau jika Anda ingin menjadi super mewah, Anda dapat mengaturnya secara dinamis:

$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',
    );
}
Jen
sumber
Terima kasih banyak, teman. Saya tidak bisa memberi tahu Anda seberapa besar sakit kepala yang telah Anda pecahkan.
Rizwan
btw, mengapa meta_value berisi data serial jika kita tidak dapat melakukan query melalui meta_query? Apakah ini bug wordpress?
Rizwan
1
Saya seorang wanita, bukan "saudara", tetapi tidak ada masalah. Meta_value berisi data serial karena cara Advanced Custom Fields menyimpan data. Itu tidak ideal, pasti.
Jen
1
haha, aku minta maaf nona. Kedua dan ketiga bekerja dengan baik, tidak mencoba yang pertama.
Rizwan
2
Anda dapat menghapus yang pertama, itu tidak berhasil
Toskan
4

Saya tahu ini sudah lama, tapi kalau-kalau seseorang memiliki masalah yang sama. Yah saya sudah mencabut rambut saya selama berjam-jam sebelum saya menemukan masalah: 'meta_query' dengan operator perbandingan 'IN' tampaknya tidak menerima array yang biasa. sebagai gantinya, Anda harus bergabung terlebih dahulu dengan ','.

Jadi, dalam kasus Anda, sesuatu seperti ini seharusnya berfungsi:

$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;
Badr
sumber
Di WP 5 Anda bisa meneruskan array langsung ke kunci nilai. Jika Anda memasukkannya ke string, Anda mungkin mendapatkan hasil yang tidak terduga terkait dengan bagaimana wp membagi string menjadi segmen untuk IN()bagian tersebut. Misalnya, 'this that', 'and', 'that'menjadi 'this','that','and','that'- jadi sepertinya lebih baik memberikan array saja.
Bananaapple