Meta verileriyle birlikte bir sürü mesaj almam gerekiyor. Tabii ki standart bir get_post_custom()
yazı sorgusu ile meta veri elde edemezsiniz, bu nedenle genellikle her yazı için bir yapmanız gerekir .
Bunun gibi bir özel sorgu ile çalışıyorum:
$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'
");
İş gibi görünüyor. Bu meta alanlarından herhangi birini aynı yayında birden fazla meta değere izin verecek şekilde kullanırsanız açılır. Bunu yapmak için bir birleşme düşünemiyorum.
Öyleyse, soru 1: Çok değerli meta alanlarını getirmek için bir birleştirme, alt sorgu veya herhangi bir şey var mı?
Fakat 2. soru: Buna değer mi? postmeta
2-sorgulama yaklaşımı tercih edilmeden önce kaç masa birleşimi eklerim? Tüm posta verilerini bir sorguda yakalayabilir, ardından ilgili tüm postaları bir başkasına alabilirim ve meta'yu post verisiyle bir sonuç setinde PHP'de birleştiririm. Bu mümkün olsa bile, her zamankinden daha karmaşık bir SQL sorgusundan daha hızlı sonuç verir mi?
Her zaman, "Veritabanına mümkün olduğunca fazla iş ver" diye düşünüyorum. Bundan emin değilim!
get_posts()
daha sonra, get_post_meta()
bu her biri için? @MannyFleurmond, WP'nin yerleşik önbelleğe alma hakkında zor bilgi bulmak zor, ancak AFAIK istek başına malzeme önbelleğe alır. Bu verileri almak için sunucuya yapılan çağrı bir AJAX çağrısıdır ve başka hiçbir şeyin ondan önce bir şeyler alacağını sanmıyorum.