Estou tentando obter uma consulta para recuperar todas as postagens onde um específico meta_key
não existe e depois criá-lo.
Estou tendo problemas para encontrar essas postagens, pois a consulta que estou testando parece não funcionar.
Aqui está o código que estou usando para tentar obter essas postagens:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
Isso não retorna nada se não houver postagens com a chave colors
, mas as retornará ids
das postagens com a chave colors
sempre que essa chave estiver presente (o oposto do que eu preciso). Eu tentei com em EXIST
vez disso, mas sem sorte.
Se alguém puder me dar uma dica sobre a maneira correta de criar uma consulta como a que eu preciso, eu aprecio isso.
Obrigado!
custom-post-types
wp-query
post-meta
JordanBel
fonte
fonte
Respostas:
Fiz mais alguns testes com isso e honestamente não consigo encontrar um motivo para não funcionar (a menos que o código acima seja apenas um trecho e o código real se encaixe nos meus exemplos abaixo). No entanto, descobri algumas coisas que podem levá-lo na direção certa.
1) Por si só, essa meta consulta é equivalente a "colors IS NULL", ou seja, retornará as postagens que não possuem essa chave definida na tabela postmeta. Este é o caso mostrado acima e deveria ter funcionado.
2) Antes do WordPress 3.9, o estabelecimento do índice de 'relação' com 'OU' altera essa condição. Retorna o oposto. Não me pergunte o porquê. Isso é especialmente importante ao fazer várias meta consultas. Isso significa que não é possível inicialmente fazer uma consulta para postagens que tenham a chave 'cores' definida como 'azul' (ou o que seja) ou que não esteja definida. A consulta abaixo ignorará a primeira condição e retornará apenas aqueles que correspondem à segunda condição.
3) No entanto, podemos enganar o WordPress usando a primeira condição, se definirmos o 'valor'. Ele não precisa de um valor relevante (é ignorado, até onde eu sei), mas precisa ser definido para que a
NOT EXISTS
condição tenha algum efeito.Isso foi verdade até o WordPress 3.9. Se você ainda estiver usando uma versão mais antiga, esta é uma solução viável.
fonte
EXISTS
eNOT EXISTS
"bug" que exigia que você especifique um valor, foi fixado em WP 3.9Usando uma consulta personalizada, isso funcionou para mim:
fonte