Saya memiliki 2 jenis 'bookmark' dan 'cuplikan' pos kustom dan 'taksonomi' tag bersama. Saya dapat membuat daftar semua istilah dalam taksonomi dengan get_terms (), tapi saya tidak tahu cara membatasi daftar ke jenis posting. Yang saya cari pada dasarnya adalah sesuatu seperti ini:
get_terms(array('taxonomy' => 'tag', 'post_type' => 'snippet'));
Apakah ada cara untuk mencapai ini? Ide sangat dihargai !!
Oh, saya di WP 3.1.1
custom-post-types
custom-taxonomy
terms
Gavin Hewitt
sumber
sumber
print_r(get_terms_by_post_type(array('category') , array('event') ));
showsWarning: Missing argument 2 for wpdb::prepare()
Jadi kebetulan saya membutuhkan sesuatu seperti itu untuk proyek yang sedang saya kerjakan. Saya hanya menulis kueri untuk memilih semua posting dari jenis khusus, lalu saya memeriksa apa saja persyaratan taksonomi saya yang sebenarnya mereka gunakan.
Lalu saya mendapatkan semua istilah yang menggunakan taksonomi itu
get_terms()
dan kemudian saya hanya menggunakan yang ada di kedua daftar, membungkusnya dalam suatu fungsi dan saya selesai.Tetapi kemudian saya membutuhkan lebih dari sekedar ID: Saya membutuhkan nama-nama sehingga saya menambahkan argumen baru bernama
$fields
sehingga saya bisa memberi tahu fungsi apa yang harus dikembalikan. Lalu saya pikir bahwaget_terms
menerima banyak argumen dan fungsi saya terbatas hanya istilah yang sedang digunakan oleh jenis posting jadi saya menambahkan satuif
pernyataan lagi dan begini :Fungsi:
Pemakaian:
Jika Anda hanya memerlukan daftar istilah id maka:
Jika Anda hanya perlu daftar nama istilah maka:
Jika Anda hanya perlu daftar objek jangka maka:
Dan jika Anda perlu menggunakan argumen tambahan get_terms seperti: orderby, order, hierarchical ...
Nikmati!
Memperbarui:
Untuk memperbaiki jumlah istilah untuk perubahan jenis posting tertentu:
untuk:
sumber
(array) $args
daftar 4 $ vars? Ini akan memungkinkan Anda untuk tidak peduli dengan urutan Anda melemparkan argumen, jadi sesuatu sepertiget_terms_by_post_type( $args = array( 'taxonomies', 'args', 'post_type', 'fields' => 'all') )
dan kemudian memanggil mereka di dalam fungsi$args['taxonomies']
. Ini akan membantu Anda menjauh dari menambahkan nilai kosong dan harus mengingat urutan argumen Anda. Saya juga menyarankan untuk menggunakan tanda kutip tunggal, bukan ganda. Saya melihat mereka naik hingga lima kali lebih cepat.'this is my mood: '.$value
lebih"this is my mood: $value"
, karena mudah dibaca. Ketika datang ke kecepatan: Tidak sedikit - saya mengukur hingga lima kali. Dan ketika Anda menggunakan tanda kutip ganda di seluruh tema Anda di mana-mana, mereka akan dengan cepat meringkas ketika Anda mendapat banyak permintaan. Ngomong-ngomong, kau sudah membuatnya jelas."
vs'
dan saya salah. Perbedaannya jauh di luar apa pun yang orang akan perhatikan.Saya menulis sebuah fungsi yang memungkinkan Anda untuk lulus
post_type
dalam$args
array keget_terms()
fungsi:HT ke @braydon untuk menulis SQL.
sumber
Pertanyaan bagus dan jawaban yang solid.
Saya sangat menyukai pendekatan oleh @ jessica menggunakan filter terms_clauses, karena ia memperluas fungsi get_terms dengan cara yang sangat masuk akal.
Kode saya merupakan kelanjutan dari idenya, dengan beberapa sql dari @braydon untuk mengurangi duplikat. Itu juga memungkinkan untuk array post_types:
Karena get_terms tidak memiliki klausa untuk GROUPY BY, saya harus menambahkannya ke akhir klausa WHERE. Perhatikan bahwa saya menetapkan prioritas filter sangat tinggi, dengan harapan ini akan selalu menjadi yang terakhir.
sumber
Saya tidak dapat membuat argumen get_terms untuk bekerja dengan versi Gavin dari kode di atas, tetapi akhirnya melakukannya dengan mengubah
untuk
seperti pada fungsi asli dari Bainternet.
sumber
@ Netternet: Terima kasih! Saya harus mengubah fungsi sedikit karena tidak berfungsi (beberapa kesalahan ketik). Satu-satunya masalah sekarang adalah bahwa hitungan istilah tidak aktif. Hitungannya tidak mempertimbangkan jenis posting jadi saya tidak berpikir Anda bisa menggunakan get_terms () dalam hal ini.
EDIT: Menambahkan perbaikan. Tetapi entah bagaimana itu masih tidak berhasil untuk saya. Hitungan masih menunjukkan nilai yang salah.
sumber
print_r(get_terms_by_post_typea(array('event','category','',array()));
yang satu ini memberikanWarning: Invalid argument supplied for foreach()
garisforeach ($current_terms as $t){
Hindari Duplikat:
sumber