Estou tentando consultar um tipo de postagem personalizado para um sistema de galeria. Eu tenho uma caixa de seleção para definir uma galeria como uma galeria "em destaque" (configurada através do plug-in More Fields) - se isso estiver marcado, o valor meta se tornará 1 e, se desmarcado, se tornará 0. Tudo bem. No entanto, se a caixa nunca tiver sido marcada, a meta-chave nunca será criada, o que significa que não posso consultar NOT LIKE 1 porque ela não existe.
A consulta que eu quero é extrair 4 galerias que não estão marcadas como '1' nesse valor meta, mas também aquelas que não têm esse valor. Existe uma maneira de sempre atribuir às postagens recém-adicionadas um valor padrão para essa meta-chave (ou seja, sempre torná-las 0 por padrão, se a caixa for deixada desmarcada) ou existe uma maneira de consultar a chave que ainda não está sendo definida?
Minha consulta atual é:
$args = array(
'post_type' => 'gallery',
'showposts' => 4,
'meta_key' => 'gal-ID',
'order_by' => 'meta_value',
'order' => 'ASC',
'meta_query' => array( array(
'key' => 'main-gal',
'value' => false,
) ),
) );
E eu tentei várias tentativas com 'compare' => 'NOT LIKE', '! =' Etc etc.
Alguma ideia? Este ingresso parece indicar que é algo que deve ser resolvido:
http://core.trac.wordpress.org/ticket/18158
Obrigado!
fonte
Conforme parâmetros de campo personalizados no Codex, a
NOT EXISTS
comparação especial está disponível desde o WP versão 3.5Tecnicamente, ele produz algo como a seguinte consulta SQL em solicitações de postagens:
Ele funciona juntando a tabela meta na chave fornecida e selecionando apenas os registros onde isso não resultou em dados significativos (
IS NULL
). Portanto, ele funciona apenas para o caso em que a chave não existe e não funciona para chaves que existem com valores falsos .fonte
NOT EXISTS
comparação. Como uma solução alternativa parasave_post
as meta-chaves não definidas , eu salvo um 0 no gancho se a meta-chave não estiver definida. ComoNOT EXISTS
funciona? Ele classificará a consulta do OPmain-gal
e preencherá o 4 com as postagens que não possuem essa meta?Como o ticket apontou, ele não é suportado. Até então, você terá que confiar em uma solução personalizada.
Alguns usuários pediram isso antes, ou pelo menos perguntaram como fazê-lo nos fóruns do WordPress.org, por isso escrevi uma função para fazer o trabalho que nunca segurei (pastebinned), felizmente encontrei o tópico original onde eu forneci o link pastebin (que não deve expirar).
http://pastebin.com/kgLt1RrG
Escrevi isso há 8 meses e não o testei (desde então), então, deixe-me saber de quaisquer problemas.
Espero que ajude..
fonte
O método mais simples, embora não o mais limpo:
Isso fornecerá todas as suas galerias classificadas pela meta-chave. O próximo passo é descobrir se as galerias com o valor 1 vêm depois ou antes das outras postagens. Dessa forma, você pode:
Outros métodos que não exigem uma instrução SQL customizada:
fonte