Saya ingin membuat wp_query yang akan mengembalikan posting meta di dalam posts
array.
$args = array (
'post_type' => 'page',
'meta_key' => 'someMetaKeyName',
);
// The Query
$query = new WP_Query( $args );
Ini mengembalikan sesuatu seperti:
Seperti yang Anda lihat posting tidak memiliki data meta, apakah mungkin untuk memasukkan data meta dalam array yang dikembalikan juga?
PS Saya tidak ingin wp_queries tambahan karena alasan kinerja.
wp-query
custom-field
post-meta
YemSalat
sumber
sumber
get_post_meta
pada kunci individual, 2) menjalankanget_post_custom
untuk mendapatkan semua bidang kustom posting dalam satu kesempatan, atau 3) membuat kueri Anda sendiri menggunakan $ wpdb class (get_results()
) untuk membangun objek kembali Anda sendiri . ($ wpdb dokumentasi kelas: codex.wordpress.org/Class_Reference/wpdb )Jawaban:
Secara default,
WP_Query
mengembalikanWP_Post
objek standar untuk posting yang ditanyai. Saya percaya dengan beberapa penulisan ulang yang cerdas dan penggunaan filter yang diberikan padaWP_Query
Anda dapat menambahkan objek keWP_Post
array objek yang dikembalikan .Apakah ini akan menjadi pemain? Menurut pendapat saya, itu akan lebih merusak kinerja karena Anda harus menggabungkan hasil dalam kueri Anda karena bidang khusus tidak disimpan dalam
wp_posts
tabel, tetapi dalamwp_postmeta
tabelMengambil posting meta sangat cepat dan tidak memerlukan contoh tambahan
WP_Query
. Anda cukup memanggil bidang khusus denganget_post_meta()
. WordPress sangat bijaksana ketika bidang kustom diperkenalkan. Mereka menambahkan cache ke cache mereka, jadi apakah Anda meminta 1 atau 100 bidang khusus, Anda memukul database sekali, super cepat. Untuk tes dan penjelasan lengkap, lihat posting ini yang baru-baru ini saya lakukan pada subjek ini.Menurut pendapat saya, panggilan basis data tambahan dan waktu aktual yang dihabiskan sepadan dan lebih cepat daripada menulis ulang
WP_Query
sedemikian rupa untuk memasukkan bidang khusus dalam objek pos standar yang dikembalikan oleh$posts
sumber
get_post_meta()
untuk setiap posting .. Saya lebih suka ada cara untuk menyimpan data tambahan baik secara langsung diwp_posts
tabel, atau dalam tabel terkait yang tidak sebanyak mindf * ck sepertiwp_postsmeta
ini.get_post_meta()
atau sebagai objek posting, Anda harus memanggilnya di setiap posting. Itu sama dengan tag templat sepertithe_content()
, Anda harus menyebutnya di setiap posting.Pertanyaan ini sudah lebih dari 1 tahun, tetapi saya memiliki masalah yang sama, dan di sini adalah fungsi yang akan menambahkan setiap meta_value dan meta_key ke objek $ wp_query,
alih-alih meminta setiap meta pos dalam loop sementara, fungsi ini akan melakukan Satu contoh kueri tambahan:
"SELECT meta_key, meta_value, post_id DARI $ wpdb-> postmeta WHERE post_id IN (1,2,3,4,5 ...)"
di mana (1,2,3,4,5 ...) saat ini meminta ID posting dari $ wp_query
Additioanal "postmeta" akan ditulis untuk setiap $ wp_query-> postingan [$ i]
$wp_query->posts[0]->postmeta
Contoh dengan 'someMetaKeyName' jangan lupa cantumkan
add_query_meta()
ke functin.php tema Andasumber
Saya memiliki masalah yang sama baru-baru ini, saya perlu mendapatkan 7 lembar metadata dari jenis pos kustom, tetapi juga perlu mendapatkan pos berdasarkan sepotong metadata.
Jadi saya membuat pernyataan SQL berikut, saya sering menggunakannya. Semoga ini bisa membantu orang lain. Saya akan mencoba menjelaskannya semampu saya.
Pertama saya mendapatkan fungsi database wordpress dengan global $ wpdb. Lalu saya mengatur posttype dengan $ pt. Untuk mendapatkan postingan yang benar yang cocok dengan nilai spesifik di post_meta, saya menetapkan $ mk (meta_key)
Lalu saya atur $ mv (meta_value) var. (dalam hal ini nilai meta cocok dengan postid)
$ mk1- $ mk7 adalah meta_keys yang saya inginkan dari setiap posting. (Saya akan mengambil nilai dalam pernyataan pilih)
Saya juga membuat 'order by' var, dengan menetapkan $ ord
Pernyataan pilih berjalan sebagai berikut: Saya memilih ID posting dan post_title dari POST atau 'hal.'
Kemudian saya memilih semua metadata yang saya perlu memilihnya dengan pm1. -> pm.7 dan meraih meta_value dan menamainya kembali (AS) sehingga lebih mudah dibaca ketika mengambil data dari objek saya.
Saya membuat BERGABUNG KIRI untuk meta data yang saya butuhkan untuk mencocokkan dengan posting. (sore)
Saya membuat 7 gabungan kiri untuk masing-masing meta data yang perlu saya ambil. (pm1-pm7)
Pernyataan WHERE didasarkan pada LEFT JOIN (pm) pertama sehingga saya akan tahu bahwa saya hanya perlu posting di mana metadata cocok.
Saya juga menambahkan 'DAN' untuk jenis posting, dan untuk post_status yang bukan konsep. (jadi hanya posting yang dipublikasikan)
Akhirnya saya menambahkan klausa 'pesanan oleh'.
Ini berfungsi cepat dan dengan indeks bawaan di Wordpress, sehingga tampaknya efisien.
Tidak tahu apakah ada sesuatu yang lebih baik dari ini, tetapi jika ya, saya ingin menggunakannya.
Semoga ini membantu.
Marcus
sumber
Hei Silakan coba yang ini saya pikir itu berfungsi dengan baik.
sumber
meta_key
danmeta_query[]['key']
juga?meta_key
dan / ataumeta_query
tidak mengubah jenis hasil yang dikembalikan, hanya permintaan itu sendiri.