Saya sedang mengerjakan tema anak, saya sangat memilih untuk tidak menimpa file templat utama untuk menjaga kesederhanaan tema anak serta meminimalkan jumlah kode dan pemeliharaan dari waktu ke waktu.
Dalam loop, templat index.php dalam tema induk menggunakan:
get_template_part( 'content' );
yang akan membawa content.php , saya ingin membuatnya berperilaku lebih mirip get_template_part( 'content', get_post_format() );
atau serupa untuk membawa berbagai templat seperti content-samping.php , dll, tanpa membuat index.php pada tema anak untuk menimpa induk untuk perubahan satu baris.
get_template_part()
terdiri dari:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Jadi ada tindakan yang tersedia, dalam kasus saya dipanggil get_template_part_content
Saya dapat menghubungkan ke tindakan dengan sesuatu seperti:
add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );
function child_post_styles ( $slug, $name ) {
if( false == $name ){
$name = get_post_format();
$templates = array();
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
}
Ini jelas menghasilkan duplikasi pos, satu dari fungsi doyan saya, yang dapat menampilkan template yang diinginkan, dan yang lainnya dari locate_template
panggilan normal diget_template_part()
Saya mengalami kesulitan menemukan cara untuk melakukan ini tanpa duplikasi, atau tanpa mengakhiri render halaman tepat setelah melayani bagian templat saya dengan melakukan sesuatu yang bodoh seperti break
atauexit
sumber
Jawaban:
Tidak ada kait untuk melakukan ini. Salin index.php ke tema anak dan buat perubahan satu baris. Juga, beri tahu penulis tema orang tua bahwa mereka harus membuat perubahan yang sama dalam tema mereka, untuk fleksibilitas.
sumber
ob_start
di dalamnya danob_end
di beberapa kait kemudian dieksekusi tetapi tidak pernah bergema, yang biasanya cukup baik. Atau Anda dapat menggunakan exit () untuk memaksa menghentikan PHP (setelah Anda menambahkan secara manual semua yang masih hilang: footer, dll)Saya pikir itu tidak mungkin persis cara yang ingin Anda capai. Ini sangat menjengkelkan karena tidak mendapatkan filter di sana untuk mengubah nama file templat :(
Saya punya solusinya. Biarkan digunakan
content.php
untuk perbandingan.Saya belum menggunakan argumen
get_template_part
fungsi kedua , melainkan saya memberikan sufiks pada argumen pertama untuk menghindari panggilan infinitif padacontent.php
file jika tidak ada'content-'. $format
file.sumber
Nah, ada SOLUSI :
tapi pikirkan baik-baik, di mana kait Anda harus memasukkan tindakan itu ... untuk mendapatkan lokasi secara manual, gunakan, yaitu
locate_template('content-header.php', false);
sumber
Jika Anda ingin menarik file bernama content-samping.php Anda memanggil fungsi seperti ini:
Parameter kedua adalah nama filer setelah tanda hubung. Jika file Anda berada di sub-direktori (templat / content-samping.php):
Itukah yang ingin Anda lakukan?
sumber