meta_query 'compare' => 'IN' non funziona
Prima di tutto, so che è un duplicato, ma nessuna delle risposte precedenti è stata d'aiuto.
Sto cercando nei post attraverso post_meta. Ecco il mio codice, che al momento non restituisce nulla.
$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;
Se rimuovo meta_query funziona. Sono sicuro di queste cose:
- Non ci sono errori di ortografia nella
keyo nelvalue. - il tipo di post è
post - C'è effettivamente un post con il valore 'single' in 'system_power_supply'. Tuttavia, i campi del post sono generati da Advanced Custom Fields.
Non esiste un modo semplice per cercare valori serializzati in una meta query. Se l'elenco di valori non è eccessivamente lungo, potresti potenzialmente impostare più meta query:
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'system_power_supply',
'value' => 'single',
'compare' => 'LIKE',
),
array(
'key' => 'system_power_supply',
'value' => 'redundant',
'compare' => 'LIKE',
)
)
Oppure, se vuoi essere più sofisticato, potresti impostarlo dinamicamente:
$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',
);
}
Grazie mille, fratello. Non riesco a dirti quanto grande mal di testa mi hai risolto.
Rizwan
a proposito, perché il meta_value contiene dati serializzati se non possiamo interrogare tramite meta_query? È un bug di WordPress?
Rizwan
Sono una donna, non un "fratello", ma nessun problema. Il meta_value contiene dati serializzati a causa del modo in cui Advanced Custom Fields salva i dati. Non è l'ideale, sicuramente.
Jen
haha, mi scusi signorina. La seconda e la terza hanno funzionato bene, non ho provato la prima.
Rizwan
So che è passato molto tempo, ma nel caso qualcuno abbia lo stesso problema. Ho passato ore a strapparmi i capelli prima di trovare il problema: 'meta_query' con l'operatore di confronto 'IN' non sembra accettare il solito array. Invece, è necessario prima unirlo con ', '.
Quindi, nel tuo caso, qualcosa come questo dovrebbe funzionare:
$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;
In WP 5 puoi semplicemente passare l'array direttamente alla chiave value. Se lo implodi in una stringa potresti ottenere risultati imprevisti riguardo a come wp suddivide la stringa in segmenti per la parte IN(). Ad esempio, 'this that', 'and', 'that' diventa 'this','that','and','that' - quindi sembra essere meglio passargli direttamente l'array.
Bananaapple