Bagaimana cara menemukan siput jenis pos khusus ketika saya berada di halaman arsip?
Misalnya jika /products/
menyalakanarchive-products.php
template, bagaimana (secara pragmatis) cara saya mendapatkan siput tipe posting?
Terima kasih
custom-post-types
archives
custom-post-type-archives
Ben Everard
sumber
sumber
get_queried_object()
akan mendapatkan info yang sama dengan sedikit gerakan.$posttype = get_query_var('post_type');
... Saya telah menambahkan alternatif yang komprehensif.Saya menggunakan ini di luar loop pada template archive.php untuk mendapatkan arsip postingan kustom yang saya gunakan.
Ini adalah kombinasi dari metode yang direkomendasikan oleh @toscho dan @Rarst:
Pembaruan: @majick menunjukkan bahwa ini hanya berfungsi jika Anda telah mengatur siput penulisan ulang untuk CPT Anda. Menulis ulang slug adalah opsional saat mendaftarkan CPT dan default ke post_type jika tidak disetel.
sumber
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
Jawabannya jadi membingungkan. Dan mungkin saya juga tetapi pertanyaan utama adalah:
Jika yang Anda maksud adalah halaman arahan arsip jenis posting , dan ketika
is_post_type_archive()
kembalitrue
, Anda ingin siput yang merespons arsip tampilan saat ini :- AKHIR JAWABAN PERTANYAAN -
Penjelasan:
Anda tidak dapat bergantung pada siput terdaftar . Wordpress juga tidak. Misalnya, ketika memanggil
get_post_type_archive_link()
Wordpress sedang memeriksa aturan penulisan ulang saat ini untuk instalasi Anda .Dimanapun Anda berada, di dalam atau di luar lingkaran, arsip saat ini atau single post, membalikkan tersebut
get_post_type_archive_link()
mekanisme. (Permalink diaktifkan.)Pertimbangan:
Seperti yang disebutkan di sini, jenis posting dalam kueri saat ini dapat berupa
array
. Anda dapat melangkah lebih jauh dengan intensitas Anda dengan memfilter jenis posting yang Anda cari, misalnya:atau
Sudut pandang lain:
Contoh Woocommerce, terdaftar dengan objek jenis posting 'produk' tetapi pada kenyataannya menggunakan nama aturan yang ditulis ulang (toko):
sumber
t harus dicatat bahwa jika
has_archive
disetel ke true saat mendaftarkan Jenis Posting Kustom, arsip tipe posting/cptslug/
akan ditulis ulang secara internal?post_type=cptslug
. Jadi ini juga berartiis_post_type_archive()
akan mengembalikan true.Sayangnya, di mana slug penulisan ulang yang terdaftar berbeda dengan jenis posting, Anda sebenarnya tidak dapat diandalkan
post_type
. misalnya. jika jenis posting Andamyplugin_cars
dan slug penulisan ulangcars
Anda dan Anda perlu mendapatkannyamyplugin_cars
maka bahkan ini (untuk mencegah kesalahan jika objek yang ditanyakan saat ini bukan jenis posting kustom) masih akan gagal:Tetapi karena
is_post_type_archive
benar ini lebih dapat diandalkan:Tapi tunggu dulu, masih ada lagi ... ternyata dengan sedikit pengujian ternyata tidak sesederhana itu juga ... bagaimana jika Anda berada di halaman arsip taksonomi dengan beberapa jenis posting dalam taksonomi ..? Atau menetapkan tag posting untuk jenis posting khusus selain dari posting? Atau ada di halaman arsip penulis? Halaman arsip tanggal? ... atau bahkan memiliki kompleks
tax_query
ataumeta_query
untukWP_Query
?Satu-satunya jawaban yang dapat diandalkan (tanpa pengujian untuk setiap kasus arsip yang mungkin) adalah untuk mengulang posting yang sebenarnya dalam permintaan ... Ini adalah fungsi lengkap yang saya buat untuk bekerja pada halaman tunggal dan arsip, dan memungkinkan Anda untuk secara opsional melewati sebuah objek kueri khusus (atau objek posting / ID posting untuk posting tunggal):
Ini akan andal (apakah saya mengatakan itu?) Mengembalikan array tipe posting jika ada lebih dari satu, atau string dengan tipe posting tunggal jika hanya ada satu jenis. Yang perlu Anda lakukan adalah:
Contoh Penggunaan (hanya untuk bersenang-senang):
Untuk melihat efeknya, ubah jenis posting khusus dalam kode menjadi
post
, dan tambahkanthumbtype-post
atribut kelas ke gambar thumbnail posting Anda ...sumber
Anda dapat menggunakan kode ini:
gunakan $ posttype_slug var apa pun yang Anda butuhkan
sumber
$queried_object->query_var['post_type'];
ini berfungsi ...?post_type=post
saya menjadi kosong. dibandingkan denganget_query_var('post_type');
Anda dapat menggunakan kode ini dan kode ini berfungsi untuk saya,
sumber
sumber