Tidak, tidak mungkin memesan berdasarkan taksonomi, karena dari sudut pandang tertentu, itu sebenarnya tidak masuk akal.
Taksonomi adalah cara untuk mengelompokkan berbagai hal bersama. Jadi titik memiliki taksonomi pada posting akan benar-benar memiliki ketentuan dalam taksonomi yang dibagi antara posting. Jika taksonomi memiliki istilah yang hanya digunakan pada satu posting masing-masing, maka itu akan membuat taksonomi semacam sia-sia. Dan jika persyaratan dibagikan seperti seharusnya, maka memesan dengan itu tidak akan menghasilkan sesuatu yang sangat berguna.
Apa yang harus Anda gunakan dalam situasi seperti ini adalah pos meta. Anda dapat memesan melalui pos meta, dan unik untuk setiap pos.
Sunting: Dikatakan, Anda dapat memesan dengan taksonomi dengan membuat kueri SQL khusus menggunakan filter, Anda tidak dapat melakukannya dari WP_Query yang tidak dimodifikasi: http://scribu.net/wordpress/sortable-taxonomy-columns.html
Namun, jika Anda harus melakukan hal semacam ini, maka struktur desain data Anda salah sejak awal. "Ketentuan" dalam taksonomi bukanlah "data" aktual. Istilah itu sendiri tidak memiliki makna yang melekat, mereka hanya label untuk pengelompokan tertentu yang mereka gambarkan. Jika Anda memperlakukannya sebagai data yang bermakna, maka Anda memiliki cacat desain yang mendasarinya.
Taksonomi mengelompokkan berbagai hal dengan memberikan persyaratan kepada mereka. Pengelompokan itu adalah inti dari taksonomi, persyaratannya hanya wajah-wajah cantik di pengelompokan. Jika Anda memiliki metadata bermakna untuk ditetapkan ke suatu pos, maka Anda harus menggunakan meta pos untuk itu. Dan Anda dapat memesannya, karena meta pos menggunakan kunci dan nilai untuk menyimpan informasi. Dengan taksonomi, Anda benar-benar hanya menyimpan kunci, dengan nilainya menjadi pos yang dikelompokkan bersama oleh istilah itu.
Hal-hal lebih mudah dalam jangka panjang jika Anda menggunakan pendekatan yang benar untuk itu. Meskipun saya tidak mengatakan bahwa Anda tidak dapat melakukan sesuatu yang aneh dengan taksonomi, Anda hanya membuat segalanya lebih sulit untuk diri Anda sendiri dalam jangka panjang dengan menggunakannya secara salah.
Jawaban yang diterima untuk pertanyaan ini tidak dapat diterima. Tidak masuk akal untuk berasumsi bahwa pemesanan dengan pajak "tidak masuk akal". Jawaban yang dia berikan tidak masuk akal.
Pertimbangkan memiliki jenis posting menu. Maka Anda memiliki pajak khusus "FoodCategories". Pajak FoodCategories memiliki ketentuan "Sarapan", "Makan Siang", dan "Makan Malam". Jika Anda mengirim permintaan menggunakan param tax_query, Anda sekarang memiliki hasil yang ditetapkan dengan semua persyaratan, namun mereka dipesan berdasarkan tanggal posting.
Untuk mendapatkan urutan yang benar dari ini, relatif terhadap persyaratannya, dan kemudian ditampilkan di ujung depan secara tepat dengan memisahkan posting ke dalam berbagai kategori mereka, Anda harus mengulang melalui set hasil, kemudian meminta setiap posting individu dalam hasil ditetapkan untuk menemukan istilah itu dan membandingkannya dengan istilah saat ini, memfilter ke dalam array dan melanjutkan seluruh. Maka Anda harus mengulang lagi melalui array baru untuk tampilan. Ini tidak produktif.
Akan lebih baik jika WP memiliki opsi orderby "tax__in" seperti halnya opsi "post__in", tetapi karena WP tidak melakukannya, Anda juga harus melakukan proses konyol di atas; sesuaikan sendiri kueri dengan filter 'posts_orderby' dan filter 'posts_join' untuk menyesuaikan metode orderby dan menambahkan istilah ke set hasil, masing-masing; atau Anda harus membuat kueri baru untuk setiap istilah yang Anda filter dalam bagian html relatif terhadap istilah tersebut.
Yang paling efisien adalah mengubah string kueri dengan cara filter. Yang paling mudah adalah dengan melakukan tiga pertanyaan terpisah. WP API harus menangani pemesanan dengan pajak, atau parameter kueri pembatasan apa pun. Jika Anda membatasi kueri berdasarkan kondisi tertentu, ada kemungkinan besar bahwa banyak orang akan perlu memesan dengan kondisi yang sama.
sumber
Ya, tapi itu cukup terlibat ...
Tambahkan ke functions.php dalam tema Anda:
Ini berasal dari beberapa hal yang ditemukan dan beberapa hal yang saya lakukan sendiri. Menjelaskan cukup sulit, tetapi intinya adalah dengan menjalankan ini, Anda dapat menempatkan? Orderby = (var taksonomi) & order = ASC (atau DESC) dan dia akan langsung pergi!
sumber
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
menjadiadd_filter('posts_clauses', 'todo_tax_clauses', 10, 2 );
Terima kasih :)Saya datang terlambat ke permainan di sini, tetapi ada cara WordPressy yang lebih sederhana untuk melakukan ini.
Buat permintaan pajak Anda seperti biasa.
Siapkan args Anda untuk query_posts atau WP_Query
Sebelum Anda melakukan panggilan query_posts / WP_Query Anda, sambungkan ke filter orderby dan timpa
jangan lupa untuk menghapus filter setelahnya ...
ini berfungsi b / c tax_query membuat gabungan dll untuk Anda, Anda hanya perlu memesan oleh salah satu bidang dari bergabung.
sumber
Baiklah, saya ingin memaparkan pengalaman saya dalam menyortir jenis posting khusus berdasarkan kategori / taksonomi.
WEB
KASUS
Di halaman daftar kategori arsip, klien ingin posting diurutkan berdasarkan
LANGKAH LANGKAH
Pertama , saya menangkap permintaan dari permintaan halaman arsip yang tidak dimodifikasi yang kebetulan seperti ini:
Kedua , saya mengedit kode sql di Sequel Pro terhadap database untuk memenuhi kebutuhan saya. Saya keluar dengan ini (ya, mungkin itu bisa diperbaiki: pengetahuan saya tentang MySQL tidak beredar):
Ketiga , saya mengaitkan kueri pada file functions.php dengan tiga filter: posts_fields, posts_join, dan posts_orderby
Kode dalam functions.php:
Akhirnya saya memicu filter dari kait pre_get_post sesuai dengan beberapa kondisi
Semoga ini bisa membantu seseorang
sumber
Saya memiliki masalah yang sangat mirip dengan yang saya tangani: Saya ingin memesan arsip jenis tulisan khusus (artikel majalah) dengan taksonomi khusus (masalah). Saya tidak pernah melakukan query SQL langsung di situs saya - dan biasanya jika Anda menyukai jawaban lain ini - Anda perlu memikirkan kembali pendekatan Anda.
MASALAH:
1) Wordpress tidak memungkinkan Anda untuk memesan taksonomi dengan cara yang cerdas.
2) Wordpress tidak memungkinkan
orderby
untuk menggunakan taksonomi pada post-type WP_Query (seperti dijabarkan oleh Otto).SOLUSI:
1) Menyortir taksonomi paling baik dilakukan oleh plugin Custom Taxonomy Order NE saat ini. Ini memungkinkan Anda untuk memesan taksonomi melalui WYSIWYG
wp-admin
yang bukan bagaimana saya akan melakukannya tetapi saya belum menemukan yang lebih baik.Ketika Anda mengatur plugin, Anda akan mendapatkan sesuatu yang mirip dengan apa yang saya lakukan di sini. Perhatikan opsi
Auto-sort Queries of this Taxonomy
- atur ini keCustom Order as Defined Above
; ini membuat Anda memesan yang Anda butuhkan. Tangkapan layar:2) Dengan taksonomi diurutkan, Anda sekarang dapat membuat serangkaian panggilan WP_Query yang dijalankan melalui setiap istilah, secara efektif membuat arsip yang dipesan oleh taksonomi. Gunakan
get_terms()
untuk membuat larik semua istilah pajak, lalu jalankanforeach
setiap istilah. Ini menciptakanWP_Query
untuk setiap item istilah yang akan mengembalikan semua posting untuk istilah yang diberikan, secara efektif membuat arsip yang dipesan oleh istilah taksonomi. Kode untuk mewujudkan ini:Bacaan terkait di situs ini: Tampilkan semua posting dalam jenis posting khusus, dikelompokkan berdasarkan taksonomi khusus
sumber
Saya tidak yakin mengapa semua solusi di sini cukup berlebihan. Oke, sudah setengah dekade yang lalu, tapi saya baru saja menjalankan kode berikut dan berfungsi:
Ini akan mengurutkan taksonomi CPT Anda terlebih dahulu dengan taksonomi dalam urutan abjad dan dalam kelompok taksonomi ini juga berdasarkan urutan abjad.
sumber
Inilah solusi yang saya gunakan untuk masalah khusus ini. Solusi ini untuk kasus-kasus ekstrem di mana keduanya tidak mungkin menggunakan
pre_get_posts
filter dan ada pagination pada kueri (yaitu: WooCommerce):Saya menggunakan ini untuk membuat menu nav yang dipesan berdasarkan taksonomi, istilah, dan jumlah posting per istilah.
Jika Anda hanya ingin posting maka ubah kueri menjadi
SELECT p.*
danGROUP BY p.ID
sumber
Ini seperti kueri sebelum kueri, tetapi tidak akan mengganggu jika kita tidak meminta terlalu banyak posting ... Idenya adalah untuk memodifikasi kueri utama sehingga kita bahkan tidak perlu pergi ke templat dan menghasilkan kueri baru dan loop ...
sumber