web-dev-qa-db-fra.com

meta_query 'compare' => 'IN' ne fonctionne pas

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:

  • Il n'y a pas d'erreur orthographique dans key ou value.
  • le type de message est post
  • est une publication avec la valeur 'single' dans 'system_power_supply'. Cependant, les champs de publication sont générés par Advanced Custom Fields .
8
Rizwan

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

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;
2
Badr