Saya melihat banyak orang lebih suka menggunakan kait pre_get_posts daripada query_posts
Yay!
Jadi pre_get_posts
menyaring WP_Query
objek yang berarti apa pun yang dapat Anda lakukan melalui query_posts()
Anda dapat lakukan melalui $query->set()
dan $query->get()
. Secara khusus kita dapat menggunakan meta_query
atribut (lihat Codex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
Tapi .. ini menggantikan 'permintaan meta' yang asli (jika ada). Jadi, kecuali jika Anda ingin sepenuhnya mengganti permintaan meta asli, saya sarankan:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
Dengan cara ini kami menambahkan kueri meta kami di samping meta kueri yang ada.
Anda mungkin / mungkin tidak ingin mengatur relation
properti $meta_query
ke AND
atau OR
(untuk mengembalikan posting yang memenuhi semua, atau setidaknya satu, meta queri).
* Catatan: Jenis kueri ini akan mengembalikan tulisan dengan kunci meta 'unggulan', tetapi nilainya tidak yes
. Itu tidak akan mencakup posting di mana kunci meta 'unggulan' tidak ada. Anda dapat melakukannya dalam 3.5 .
Yes
danNo
opsi dan 'Tidak' akan dipilih secara default. Ketika saya ingin menampilkan posting saya akan memilihYes
. Namun, saya ingin 5 posting terakhir tetap ditampilkan dan yang lain melanjutkan untuk ditampilkan pada permintaan utama. Saya tidak ingin kembali dan mengubah pilihan setiap kali jadi saya harus menemukan cara untuk mengecualikan hanya 5 posting terbaru saja. Saya melihat banyak pertanyaan serupa di stackexchange dan harus ada cara mudah untuk mengelola posting yang ditampilkan. (cara yang tidak memengaruhi kinerja umum, tidak membuat banyak kueri atau memerlukan kueri sql campuran)Yes
atauNo
nilai untuk semua posting. Akan lebih baik untuk mengecualikan posting yang tidak memilikifeatured
kunci.Uncaught Error: [] operator not supported for strings
kesalahan karena yang aslimeta_query
kembali sebagai nol. Anda bisa mendapatkan sekitar dengan jatuh kembali ke array kosong jika tidak eksis beralih keluar$meta_query = $query->get('meta_query');
untuk$meta_query = ( is_array( $query->get('meta_query') ) ) ? $query->get('meta_query') : [];
.Saya ingin memposting solusi sementara saya untuk postingan unggulan jika-kalau ada orang yang memanfaatkannya. Saya tidak menggunakan
pre_get_posts
kait di sini tetapi tidakquery_posts
juga. Masalahnya adalah saya harus bermain dengan kueri utama dan harus menjalankan kueri sql. Saya akan senang jika ada pakar yang bisa memeriksa kodenya dan beri tahu saya apakah tidak apa-apa dan tidak akan menyebabkan masalah kinerja. Ini juga akan bagus jika ada yang memiliki pendekatan yang lebih baik dan membaginya dengan kami.Buat kueri posting fitur
Buat kueri utama, kecualikan pos yang memiliki meta_key unggulan, batasi pengecualian ke 5 pos terbaru dan tampilkan semua lainnya.
sumber
Sebagai respons @Carlisle, jika Anda ingin mengecualikan 5 posting terbaru yang ditandai sebagai fitur, Anda dapat melakukan hal berikut. Ubah posting_per_page menjadi berapa banyak yang ingin Anda kecualikan, dan meta_query menjadi bagaimana Anda menentukan kategori unggulan.
sumber