Necesito obtener un montón de publicaciones con sus metadatos. Por supuesto, no puede obtener metadatos con una consulta de publicaciones estándar, por lo que generalmente tiene que hacer un get_post_custom()
para cada publicación.
Estoy intentando con una consulta personalizada, como esta:
$results = $wpdb->get_results("
SELECT p.ID,
p.post_title,
pm1.meta_value AS first_field,
pm2.meta_value AS second_field,
pm3.meta_value AS third_field
FROM $wpdb->posts p LEFT JOIN $wpdb->postmeta pm1 ON (
pm1.post_id = p.ID AND
pm1.meta_key = 'first_field_key'
) LEFT JOIN $wpdb->postmeta pm2 ON (
pm2.post_id = p.ID AND
pm2.meta_key = 'second_field_key'
) LEFT JOIN $wpdb->postmeta pm3 ON (
pm3.post_id = p.ID AND
pm3.meta_key = 'third_field_key'
)
WHERE post_status = 'publish'
");
Parece funcionar. Se dispara si usa cualquiera de esos metacampos de una manera que permita múltiples metavalores para él en la misma publicación. No puedo pensar en unirme para hacer eso.
Entonces, pregunta 1: ¿hay una combinación, subconsulta o lo que sea, para incorporar metacampos de valores múltiples?
Pero pregunta 2: ¿Vale la pena? ¿Cuántas postmeta
combinaciones de tablas agrego antes de que sea preferible un enfoque de 2 consultas? Podría tomar todos los datos de publicación en una consulta, luego tomar todos los postmeta relevantes en otra, y combinar el meta con los datos de publicación en un conjunto de resultados en PHP. ¿Acabaría siendo más rápido que una única consulta SQL cada vez más compleja, si eso fuera posible?
Siempre pienso: "Ofrezca la mayor cantidad de trabajo posible a la base de datos". ¡No estoy seguro de esto!
get_posts()
, ¿entonces get_post_meta()
para cada una de ellas? @MannyFleurmond, es difícil encontrar información concreta sobre el almacenamiento en caché incorporado de WP, pero AFAIK almacenaría cosas en caché por solicitud. La llamada al servidor para capturar estos datos es una llamada AJAX, y no creo que otra cosa esté tomando cosas antes.