Bisakah seseorang tolong jelaskan kepada saya bagaimana fungsi ini bekerja? Saya tahu apa fungsinya, tetapi ketika saya melihat kode sumber di template twenty_ten, saya tidak mengerti bagaimana semua loop dikumpulkan dalam satu loop.php (saya melihat file itu juga).
Jadi bagaimana misalnya mengabstraksi bagian umum tertentu dari template dan kemudian menggunakannya kembali di template lain?
get-template-part
Amit Erandole
sumber
sumber
Jawaban:
Beberapa jawaban pengantar yang sangat bagus di sini.
Pada dasarnya,
get_template_part()
memungkinkan pengembang tema untuk mengatur urutan spesifisitas file template. Pikirkan itu mirip dengan spesifisitas karena berlaku untuk penyeleksi CSS. Saat mendesain sesuatu, Anda ingin memulainya dengan minimal spesifik, sehingga dapat dengan mudah diganti dalam bagian-bagian desain yang perlu perhatian individu.Jadi misalnya, Anda mendesain blog dan membuat file loop.php yang berfungsi baik untuk menandai posting. Tetapi Anda berencana ke depan, dan Anda menyebutnya dalam file template Anda nanti dengan penentu konteks tambahan - katakanlah, pada halaman indeks, Anda memanggil
get_template_part( 'loop', 'index' );
, pada template tunggal, Anda memanggilget_template_part( 'loop', 'single' );
, pada halaman arsip, Anda meneleponget_template_part( 'loop', 'archive' );
, dan sebagainya. Ini membuatnya sangat mudah ketika Anda memutuskan untuk menandai loop pada halaman arsip Anda berbeda dari halaman rumah: cukup buat template loop-archive.php dan itu akan digunakan daripada generik loop.php .Tetapi keajaiban di belakang
get_template_part()
adalah dalam fungsilocate_template()
, yang memeriksa dulu direktori tema, lalu direktori induk (jika ada) untuk file bernama. Ini sangat berguna untuk pengembangan plugin. Di salah satu plugin saya, saya mendefinisikan jenis posting kustom dan membuat file template lingkaran untuk jenis posting kustom di direktori plugin saya. Tapi ... Saya ingin mengizinkan tema menggunakan plugin saya untuk mengganti markup saya jika mereka memilih. Di sinilahlocate_template()
keajaiban bekerja.akan mencari masing-masing nama dalam array $ template_names di direktori stylesheet, kemudian di direktori template. Melewati 'true' sebagai argumen $ load berarti ia akan membutuhkan file pertama yang ditemukan, dan akan mengembalikan string kosong jika tidak ada file template yang ditemukan. Jadi saya bisa melakukan sesuatu seperti ini di plugin saya:
... yang semestinya membuatnya mudah bagi pengembang tema untuk menyesuaikan plugin saya hanya dengan memasukkan file yang disebut loop-mycustomposttype.php dalam tema mereka.
sumber
include(locate_template( 'loop-mycustomposttype.php'))
Cara ini dimungkinkan untuk melewatkan variabel. Saya menemukan tautan ini di sini . Ini sangat berguna!if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
require
ataurequire_once
panggilan (darilocate_template
) ada di dalam fungsi dan karenanya tidak memiliki akses ke lingkup saat ini.Tidak semua loop, loop utama. ;-) Tidak masalah jika Anda melihat halaman depan Anda atau kategori atau tahu apa, Anda akan selalu memiliki loop utama. Konten dari loop utama itu ditentukan oleh kueri yang sudah dijalankan sebelum templat Anda dipanggil sama sekali.
Template loop.php hanya menjalankan item-item dalam loop dan memformatnya. Lihat dokumentasi di Codex .
Jika Anda melihat loop.php dari Twenty-Ten, Anda dapat melihat bahwa Twenty-Ten kemudian melakukan diversifikasi dalam file templat tunggal itu.
get_template_part()
hanya memuat bagian templat dan menjalankannya. Anda juga dapat mengekstrak bagian-bagian dari loop.php Anda ke dalam file-file terpisah dan menggantinya denganget_template_part('loop', 'category')
panggilan a dan seterusnya.Atau Anda bisa memiliki bagian-template untuk setiap posting individu dalam lingkaran dan memiliki loop.php Anda hanya memanggil
get_template_part('loop','post');
dalamwhile...
klausa. Semua terserah Anda.sumber
Dari kodeks get_template_part :
Jadi efektif itu akan berfungsi seolah-olah Anda memerlukan file php lain.
Pembaruan : Ada sedikit perbedaan untuk 'memerlukan' - Dibungkus di dalam fungsi sehingga Anda harus
global
jika ingin meneruskan variabel apa pun dari templat Anda ke bagian templat Anda.sumber