Bagian favorit saya dari hierarki templat Wordpress adalah kemampuan untuk dengan cepat membuat file templat untuk halaman dengan siput, tanpa harus mengedit halaman di Wordpress untuk memilih templat.
Saat ini kami dapat melakukan ini:
halaman- {slug} .php
Tetapi saya ingin dapat melakukan ini:
single- {post_type} - {slug} .php
Jadi, misalnya, dalam jenis posting yang disebut review
, saya dapat membuat templat untuk posting yang disebut "My Great Review" disingle-review-my-great-review.php
Adakah yang sudah mengatur ini sebelumnya? single-{post_type}-{slug}.php
single-{post_type}-{slug}.php
, jadi meningkatkan ke WP 3.4 adalah pilihan lain.Jawaban:
A) Basis di Inti
Seperti yang Anda lihat di penjelasan Codex Template Hierarchy,
single-{$post_type}.php
sudah didukung.B) Memperluas Hirarki inti
Sekarang dengan senang hati ada beberapa filter dan kait di dalamnya
/wp-includes/template-loader.php
.do_action('template_redirect');
apply_filters( 'template_include', $template )
get_query_template( $type, ... )
bernama:"$type}_template"
B.1) Cara kerjanya
is_*()
.is_single() && $template = get_single_template()
get_query_template( $type, $templates )
, di mana$type
adalahsingle
"{$type}_template"
filterC) Solusinya
Karena kami hanya ingin memperluas hierarki dengan satu templat yang dimuat sebelum
"single-{$object->post_type}.php"
templat yang sebenarnya , kami akan mencegat hierarki dan menambahkan templat baru ke awal larik templat.CATATAN: (Jika Anda ingin menggunakan sesuatu selain dari objek standar siput) Anda harus menyesuaikan
$slug
sesuai dengan permalink-struktur Anda. Cukup gunakan apa pun yang Anda butuhkan dari global(object) $post
.Tiket Trac
Karena pendekatan di atas saat ini tidak didukung (Anda hanya dapat memfilter jalur lokasi absolut dengan cara ini), berikut adalah daftar tiket trac:
get_query_template()
sumber
)
di dalam filter. Tetap. Mungkin Anda ingin menukar tanda hubung dengan garis bawah sebelum siput di dalam templat. Hanya untuk membiarkan sufiks menonjol dengan lebih baik ketika melihat di atas templat.$templates
merupakan array. Lihat fungsi inti dalam pastebin ini (tidak ada tanggal kedaluwarsa). Pastikan Anda mengujinya dengan pemasangan tanpa plugin dan tema default. Kemudian aktifkan satu demi satu dan lihat apakah kesalahan masih terjadi.slug
hanya tersedia untuk persyaratan dan taksonomi. Anda harus mengganti$post->post_name
dengan yang sesuai dengan struktur permalink Anda. Saat ini tidak ada cara untuk melakukan ini secara otomatis untuk semua kasus dengan mengambil dan mengganti path tergantung pada perma struct Anda dan aturan penulisan ulang. Harapkan pembaruan lainnya.Mengikuti gambar Templat Hirarki , saya tidak melihat opsi seperti itu.
Jadi, inilah cara saya melakukannya:
Solusi 1 (Terbaik menurut saya)
Buat file template dan kaitkan ke review
Menambahkan file php template di direktori tema Anda, itu akan muncul sebagai opsi template di halaman edit posting Anda.
Solusi 2
Ini mungkin bisa dicapai menggunakan
template_redirect
hook.Dalam file functions.php:
EDIT
Menambahkan
file_exists
ceksumber
exit;
disana?exit()
ini diperlukan untuk mencegah pemuatan templat default.Jawaban teratas (dari 4 tahun lalu) tidak lagi berfungsi, tetapi kodeks WordPress memiliki solusinya di sini :
sumber
Gunakan Templat Halaman
Pendekatan lain untuk skalabilitas adalah menduplikasi fungsionalitas drop-down templat halaman pada
page
jenis posting untuk jenis posting kustom Anda.Kode yang dapat digunakan kembali
Duplikasi dalam kode bukanlah praktik yang baik. Lembur itu dapat menyebabkan mengasapi parah ke basis kode ketika kemudian membuatnya sangat sulit bagi pengembang untuk mengelola. Alih-alih membuat templat untuk setiap siput tunggal, Anda kemungkinan besar akan membutuhkan templat satu-ke-banyak yang dapat digunakan kembali alih-alih satu-ke-satu pasca-ke-templat.
Kode
Ini sedikit jawaban yang terlambat, tetapi saya pikir ini akan berharga karena tidak ada seorang pun di web yang mendokumentasikan pendekatan ini sejauh yang saya tahu. Semoga ini bisa membantu seseorang.
sumber
Dalam kasus saya, saya memiliki Album dan Lacak jenis kiriman khusus yang ditautkan oleh taksonomi Album. Saya ingin dapat menggunakan template tunggal yang berbeda untuk Album dan Lacak posting tergantung pada taksonomi Album mereka.
Berdasarkan jawaban Kaiser di atas, saya menulis kode ini. Itu bekerja dengan baik.
Catatan. Saya tidak memerlukan add_action ().
Sekarang saya dapat membuat templat bernama single-gregory-cpt-track-tax-serendipity.php dan single-gregory-cpt-album-tax-serendipity.php dan WP akan menggunakannya secara otomatis; 'tax-serendipity' adalah siput untuk istilah taksonomi Album pertama.
untuk referensi, kait filter 'single_template' dinyatakan di:
/wp-includes/theme.php:
get_query_template()
Terima kasih Kaiser untuk kode sampel.
Salam, Gregory
sumber
Pembaruan untuk kode Brians, saya menemukan bahwa ketika kotak dropdown tidak digunakan opsi template "default" disimpan ke wp_page_template yang menyebabkannya mencoba dan menemukan template yang disebut default. perubahan ini hanya memeriksa opsi "default" saat menyimpan dan menghapus meta pos sebagai gantinya (berguna jika Anda mengubah opsi templat kembali ke default)
sumber