Vejo que muitas pessoas preferem usar o gancho pre_get_posts em vez de query_posts
Yay!
Então pre_get_posts
filtra um WP_Query
objeto, o que significa que qualquer coisa que você possa fazer via, query_posts()
pode fazer via $query->set()
e $query->get()
. Em particular, podemos fazer uso do meta_query
atributo (consulte Codex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Mas .. isso substitui a 'meta query' original (se houver). Portanto, a menos que você queira substituir completamente a meta consulta original, sugiro:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
Dessa forma, adicionamos nossa meta consulta ao lado das meta consultas existentes.
Você pode ou não querer definir a relation
propriedade de $meta_query
como AND
ou OR
(para retornar postagens que atendam a todas, ou pelo menos uma, meta consultas).
* Nota: este tipo de consulta retornará postagens com a meta-chave 'em destaque', mas cujo valor não é yes
. Não incluirá postagens onde a meta-chave 'em destaque' não existe. Você poderá fazer isso na versão 3.5 .
Yes
eNo
opções e 'Não' será selecionada por padrão. Quando desejar destacar uma postagem, selecionareiYes
. No entanto, quero que as últimas 5 postagens permaneçam em destaque e outras sejam exibidas na consulta principal. Não quero voltar e alterar a seleção todas as vezes, por isso tenho que encontrar uma maneira de excluir apenas as 5 postagens mais recentes. Vejo muitas perguntas semelhantes no stackexchange e deve haver uma maneira fácil de gerenciar essas postagens em destaque. (uma forma que não afeta o desempenho geral, não cria muitas consultas ou exigir consultas SQL mistos)Yes
ouNo
valor para todas as postagens. Seria ótimo excluir as postagens que simplesmente não possuem afeatured
chave.Uncaught Error: [] operator not supported for strings
erro, pois o originalmeta_query
voltava como nulo. Você pode obter em torno dele, caindo para trás para uma matriz vazia se não existe nenhum comutação para fora$meta_query = $query->get('meta_query');
para$meta_query = ( is_array( $query->get('meta_query') ) ) ? $query->get('meta_query') : [];
.Quero postar minha solução temporária para as postagens em destaque, caso algumas pessoas possam fazer uso dela. Eu não uso
pre_get_posts
gancho aqui, masquery_posts
também não . O problema é que eu tenho que brincar com a consulta principal e executar uma parte da consulta sql. Ficaria feliz se algum especialista pudesse verificar o código e me informar se está correto e não causará problemas de desempenho. Também será ótimo se alguém tiver uma abordagem melhor e compartilhá-la conosco.Criar consulta de postagens em destaque
Crie a consulta principal, exclua as postagens com a meta_key em destaque, limite a exclusão a 5 postagens mais recentes e mostre todas as outras.
fonte
Em resposta @Carlisle, se você quiser excluir as 5 postagens mais recentes marcadas como em destaque, faça o seguinte. Mude o posts_per_page para quantos você deseja excluir e a meta_query para como você está designando a categoria em destaque.
fonte