meta_query 'compare' = 'IN' não funciona

8

Primeiro de tudo, sei que é uma duplicata, mas nenhuma das respostas mais antigas foi útil.

Estou pesquisando em postagens por meio de post_meta . Aqui está o meu código, que atualmente não retorna nada.

$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 eu remover meta_query , isso funciona. Tenho certeza dessas coisas:

  • Não há erro de ortografia no key ou no value .
  • o tipo de postagem é post
  • Existe uma publicação com o valor 'single' em 'system_power_supply'. No entanto, os campos de postagem são gerados pelos Campos personalizados avançados .
por Rizwan 03.04.2015 / 21:43

2 respostas

7

Não há uma maneira fácil de pesquisar valores serializados em uma consulta meta. Se a lista de valores não for louca por muito tempo, você poderá configurar várias meta-consultas:

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

Ou se você quiser ser super chique, você pode configurá-lo 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',
    );
}
    
por guiniveretoo 03.04.2015 / 22:31
1

Eu sei que já faz muito tempo, mas apenas no caso de alguém ter o mesmo problema. Bem, eu tenho puxado meu cabelo por horas antes de encontrar o problema: 'meta_query' com o operador de comparação 'IN' não parece aceitar o array usual. em vez disso, você precisa entrar primeiro com ','.

Então, no seu caso, algo assim deve funcionar:

$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;
    
por Badr 21.12.2017 / 12:39