Eu gostaria de criar um wp_query que retornaria posts meta dentro da posts
matriz.
$args = array (
'post_type' => 'page',
'meta_key' => 'someMetaKeyName',
);
// The Query
$query = new WP_Query( $args );
Isso retorna algo como:
Como você pode ver, as postagens não possuem metadados, é possível incluir também os metadados na matriz retornada?
PS: Não quero wp_queries adicionais por motivos de desempenho.
wp-query
custom-field
post-meta
YemSalat
fonte
fonte
get_post_meta
em chaves individuais, 2) executarget_post_custom
para obter todos os campos personalizados de uma postagem de uma só vez ou 3) criar sua própria consulta usando a classe $ wpdb (get_results()
) para criar seu próprio objeto de retorno . (documentação da classe $ wpdb: codex.wordpress.org/Class_Reference/wpdb )Respostas:
Por padrão,
WP_Query
retorna osWP_Post
objetos padrão para as postagens que estão sendo consultadas. Acredito que, com alguma reescrita inteligente e o uso dos filtros fornecidos,WP_Query
você pode adicionar objetos àWP_Post
matriz de objetos retornados .Será este um desempenho? Na minha opinião, isso prejudicará mais o desempenho, pois você precisará associar os resultados na sua consulta, pois os campos personalizados não são salvos na
wp_posts
tabela, mas nawp_postmeta
tabelaA recuperação da meta meta é realmente rápida e não requer nenhuma instância extra de
WP_Query
. Você pode simplesmente chamar o campo personalizado comget_post_meta()
. O WordPress foi muito atencioso quando os campos personalizados foram introduzidos. Eles adicionaram um cache para armazená-los, portanto, se você estiver consultando 1 ou 100 campos personalizados, estará atingindo o banco de dados uma vez, super rápido. Para um teste e explicação completos, consulte este post que fiz recentemente sobre esse assunto.Na minha opinião, a chamada extra ao banco de dados e o tempo real gasto valem a pena e são mais rápidos do que reescrever de
WP_Query
forma a incluir campos personalizados no objeto de postagem padrão retornado por$posts
fonte
get_post_meta()
todas as postagens. Prefiro que haja uma maneira de armazenar dados adicionais diretamente nawp_posts
tabela ou em um tabela relacionada que não é tão preocupante quantowp_postsmeta
é.get_post_meta()
-lo como um objeto de postagem, você precisará chamá-lo em todas as postagens. É o mesmo com as tags de modelo comothe_content()
, você deve chamá-lo em todas as postagens.Esta pergunta tem mais de um ano, mas eu tenho o mesmo problema, e aqui está a função que adicionará cada meta_value e meta_key ao objeto $ wp_query,
em vez de consultar cada meta postada no loop while, esta função fará um exemplo extra de consulta:
"SELECT meta_key, meta_value, post_id FROM $ wpdb-> postmeta WHERE post_id IN (1,2,3,4,5 ...)"
em que (1,2,3,4,5 ...) são IDs de postagem consultadas com cuidado de $ wp_query
Additioanal "postmeta" será gravado em cada $ wp_query-> posts [$ i]
$wp_query->posts[0]->postmeta
Exemplo com 'someMetaKeyName' não se esqueça de colocar
add_query_meta()
ao seu tema functin.phpfonte
Recentemente, tive um problema semelhante, precisava obter 7 partes de metadados de um tipo de postagem personalizado, mas também precisava obter a postagem com base em uma parte de metadados.
Então, eu criei a seguinte instrução SQL, eu a uso frequentemente. Espero que ajude alguém. Vou tentar explicar da melhor maneira possível.
Primeiro, recebo as funções do banco de dados wordpress com o global $ wpdb. Depois, defino o posttype com $ pt. Para obter a postagem correta que corresponda a um valor específico em post_meta, defino o $ mk (meta_key)
Então eu defino a var $ mv (meta_value). (nesse caso, o valor meta corresponde a um postid)
$ mk1- $ mk7 são as meta_keys que eu quero de cada post. (Vou pegar os valores na instrução select)
Também faço o 'order by' a var, definindo $ ord
A instrução select é a seguinte: seleciono o ID da postagem e o post_title no POST ou 'p'.
Depois, seleciono todos os metadados necessários para selecioná-los com pm1. -> pm.7 e pegando o meta_value e renomeando-os (AS) para ficar mais legível ao recuperar os dados do meu objeto.
Eu crio um JOIN ESQUERDO para os metadados que preciso corresponder à postagem. (PM)
Eu crio 7 junções esquerdas para cada um dos metadados que preciso recuperar. (pm1-pm7)
A instrução WHERE é baseada no primeiro LEFT JOIN (pm), para que saiba que eu preciso apenas das postagens onde os metadados correspondem.
Também adiciono um 'AND' para o tipo de postagem e para os post_statuses que não são rascunhos. (apenas postagens publicadas)
Finalmente, adiciono a cláusula 'order by'.
Isso funciona rápido e com os índices internos do Wordpress, por isso parece eficiente.
Não sei se algo é melhor que isso, mas se for, eu adoraria usá-lo.
Espero que isto ajude.
Marcus
fonte
Ei, por favor, tente este aqui, acho que funciona bem.
fonte
meta_key
emeta_query[]['key']
também?meta_key
e / oumeta_query
não modifique o tipo de resultado retornado, apenas a própria consulta.