Me gustaría crear un wp_query que devuelva mensajes meta dentro de la posts
matriz.
$args = array (
'post_type' => 'page',
'meta_key' => 'someMetaKeyName',
);
// The Query
$query = new WP_Query( $args );
Esto devuelve algo como:
Como puede ver, las publicaciones no tienen metadatos, ¿es posible incluir también los metadatos en la matriz devuelta?
PD: No quiero wp_queries adicionales por razones de rendimiento.
wp-query
custom-field
post-meta
YemSalat
fuente
fuente
get_post_meta
en teclas individuales, 2) ejecutarget_post_custom
para obtener todos los campos personalizados de una publicación en una sola toma, o 3) crear su propia consulta utilizando la clase $ wpdb (get_results()
) para construir su propio objeto de retorno . ($ clase de documentación wpdb : codex.wordpress.org/Class_Reference/wpdb )Respuestas:
Por defecto,
WP_Query
devuelve losWP_Post
objetos estándar para las publicaciones que se consultan. Creo que con una reescritura inteligente y el uso de los filtros proporcionadosWP_Query
, puede agregar objetos a laWP_Post
matriz de objetos devueltos .¿Será esto eficaz? En mi opinión, perjudicará más el rendimiento ya que necesitará unir resultados en su consulta ya que los campos personalizados no se guardan en la
wp_posts
tabla, sino en lawp_postmeta
tablaLa recuperación de la meta meta es realmente rápida y no requiere ninguna instancia adicional de
WP_Query
. Simplemente puede llamar al campo personalizado conget_post_meta()
. WordPress fue muy atento cuando se introdujeron los campos personalizados. Agregaron un caché para almacenarlos en caché, por lo que si está consultando 1 o 100 campos personalizados, está accediendo a la base de datos una vez, súper rápido. Para una prueba completa y una explicación, vea esta publicación que hice recientemente sobre este tema.En mi opinión, la llamada adicional a la base de datos y el tiempo real empleado valen la pena y son más rápidos que la reescritura
WP_Query
para incluir campos personalizados en el objeto de publicación estándar devuelto por$posts
fuente
get_post_meta()
a cada publicación ... Preferiría que hubiera una manera de almacenar datos adicionales directamente en lawp_posts
tabla o en un tabla relacionada que no es tan mental comowp_postsmeta
es.get_post_meta()
o como un objeto de publicación, deberá llamarlo en cada publicación. Es lo mismo con las etiquetas de plantilla comothe_content()
, tienes que llamarlo en cada publicación.Esta pregunta tiene más de 1 año, pero tengo el mismo problema, y aquí está la función que agregará cada meta_value y meta_key al objeto $ wp_query,
en lugar de consultar cada meta del post en el ciclo while, esta función hará un ejemplo de consulta adicional:
"SELECT meta_key, meta_value, post_id FROM $ wpdb-> postmeta DONDE post_id IN (1,2,3,4,5 ...)"
donde (1, 2, 3, 4, 5 ...) se busca ID de publicación de $ wp_query
"Postmeta" adicional se escribirá en cada $ wp_query-> posts [$ i]
$wp_query->posts[0]->postmeta
Ejemplo con 'someMetaKeyName' no olvide poner
add_query_meta()
a su tema functin.phpfuente
Recientemente tuve un problema similar, necesitaba obtener 7 piezas de metadatos de un tipo de publicación personalizado, pero también necesitaba obtener la publicación basada en una pieza de metadatos.
Así que creé la siguiente declaración SQL, la uso a menudo. Esperemos que ayude a alguien más. Trataré de explicarlo lo mejor que pueda.
Primero obtengo las funciones de la base de datos de WordPress con $ wpdb global. Luego configuré el posttipo con $ pt. Para obtener la publicación correcta que coincida con un valor específico en post_meta, configuro $ mk (meta_key)
Luego configuro el $ mv (meta_value) var. (en este caso, el metavalor coincide con un postid)
$ mk1- $ mk7 son las meta_keys que quiero de cada publicación. (Tomaré los valores en la instrucción select)
También hago el 'ordenar por' una var, estableciendo $ ord
La declaración de selección es la siguiente: selecciono el ID de la publicación y el post_title de POST o 'p'.
Luego selecciono todos los metadatos que necesito seleccionándolos con pm1. -> pm.7 y agarrando el meta_valor y renombrándolos (AS) para que sea más legible al recuperar los datos de mi objeto.
Creo una IZQUIERDA ÚNICA para los metadatos que necesito para que coincidan con la publicación. (pm)
Creo 7 combinaciones de izquierda para cada uno de los metadatos que necesito recuperar. (pm1-pm7)
La declaración WHERE se basa en la primera LEFT JOIN (pm) para que sepa que solo necesito las publicaciones donde coinciden los metadatos.
También agrego un 'Y' para el tipo de publicación y para los post_statuses que no son borradores. (solo publicaciones publicadas)
Finalmente agrego la cláusula 'ordenar por'.
Esto funciona rápido y con los índices integrados en Wordpress, por lo que parece eficiente.
No sé si algo es mejor que esto, pero si lo es, me encantaría usarlo.
Espero que esto ayude.
Marcus
fuente
Hey, por favor prueba este, creo que funciona bien.
fuente
meta_key
ymeta_query[]['key']
también?meta_key
y / ometa_query
no modifique el tipo de resultados devueltos, solo la consulta misma.