meta_query 'compar' => 'IN' çalışmıyor


14

Her şeyden önce, bunun bir kopya olduğunu biliyorum, ancak eski cevapların hiçbiri yardımcı olmadı.

Aracılığıyla yayınlarda arama yapıyorum post_meta. İşte şu anda hiçbir şey döndürmeyen kodum.

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

Kaldırırsam meta_queryçalışır. Bunlardan eminim:

  • keyYa da 'da yazım hatası yok value.
  • posta türü post
  • Orada ise 'system_power_supply' de 'tek' bir değere sahip bir yazı. Ancak, yayın alanları Gelişmiş Özel Alanlar tarafından oluşturulur .

olduğu system_power_supplytefrika?
Howdy_McGee

Evet öyle. İşte postmeta tablosundaki değer a:1:{i:0;s:6:"single";}
Rizwan

2
sorununuz budur, meta sorgu serileştirilmiş veriler üzerinde çalışmaz. bu sitede serileştirilmiş verileri sorgulamak için arama yaparsanız bazı yanıtlar bulacaksınız, ancak hiçbir yöntem ideal olmayacaktır.
Milo

Yanıtlar:


13

Meta sorguda serileştirilmiş değerleri aramanın kolay bir yolu yoktur. Değerler listesi çok uzun değilse, büyük olasılıkla birden fazla meta sorgu ayarlayabilirsiniz:

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

Veya süper süslü olmak istiyorsanız, dinamik olarak ayarlayabilirsiniz:

$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',
    );
}

Çok teşekkür ederim kardeşim. Size ne kadar büyük baş ağrısını çözdüğümü söyleyemem.
Rizwan

btw, meta_query ile sorgulama yapamıyorsak neden serileştirilmiş veriler içeren meta_value? Bu wordpress'in hatası mı?
Rizwan

1
Ben bir kadınım, "kardeş" değil, sorun değil. Meta_değer, Gelişmiş Özel Alanların verileri kaydetme biçimi nedeniyle serileştirilmiş veriler içerir. Kesinlikle ideal değil.
Jen

1
haha, hanımımdan özür dilerim. İkinci ve üçüncü iyi çalıştı, ilkini denemedim.
Rizwan

2
ilkini kaldırabilirsin, işe yaramaz
Toskan

4

Çok uzun zaman geçtiğini biliyorum, ama birisinin aynı sorunu yaşama ihtimaline karşı. Sorunu bulmadan önce saçlarımı saatlerce çekiyorum: 'IN' karşılaştırma operatörü ile 'meta_query' normal diziyi kabul etmiyor gibi görünüyor. bunun yerine önce ',' ile katılmanız gerekir.

Yani, sizin durumunuzda, böyle bir şey çalışmalıdır:

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

WP 5'te diziyi doğrudan değer anahtarına geçirebilirsiniz. Eğer bunu bir dizgiye yerleştirirseniz, wp'nin dizeyi parça için parçalara ayırmasıyla ilgili beklenmedik sonuçlar alabilirsiniz IN(). Örneğin, 'this that', 'and', 'that'olur 'this','that','and','that'- bu yüzden sadece diziyi vermek daha iyi görünüyor.
Bananaapple
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.