Tout d’abord, je sais que c’est un doublon, mais aucune des réponses les plus anciennes n’est utile.
Je cherche dans les messages par post_meta
. Voici mon code, qui ne retourne actuellement rien.
$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;
Si je supprime meta_query
cela fonctionne. Je suis sûr de ces choses:
key
ou value
.post
Il n'y a pas de moyen facile de rechercher des valeurs sérialisées dans une méta-requête. Si la liste de valeurs n'est pas trop longue, vous pouvez éventuellement configurer plusieurs méta-requêtes:
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'system_power_supply',
'value' => 'single',
'compare' => 'LIKE',
),
array(
'key' => 'system_power_supply',
'value' => 'redundant',
'compare' => 'LIKE',
)
)
Ou si vous voulez être très chic, vous pouvez le configurer de manière dynamique:
$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',
);
}
Je sais que ça fait longtemps, mais juste au cas où quelqu'un aurait le même problème. Eh bien, je me suis tiré les cheveux pendant des heures avant de trouver le problème: 'méta_query' avec l'opérateur de comparaison 'IN' ne semble pas accepter le tableau habituel. au lieu de cela, vous devez d'abord le rejoindre avec ','.
Donc, dans votre cas, quelque chose comme ça devrait marcher:
$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;