get_template_part vs kait tindakan dalam tema

15

Menurut saya keduanya memberikan kesempatan bagi pengguna akhir untuk memodifikasi tema tanpa benar-benar mengedit file tema (via tema anak).

Pertanyaan saya adalah, apakah satu metode lebih disukai daripada yang lain.

Sebagai contoh, ambil tema yang sedang saya kerjakan sekarang. Saya mencoba memutuskan apakah akan menggunakan bagian templat dari kait.

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

Di atas memungkinkan pengguna tema untuk mengganti bagian mana pun dari kode yang ada dengan hanya membuat file yang sesuai nama dalam folder tema anak mereka serta menambahkan kode baru sebelum / sesudah setiap bagian yang sudah ada dengan metode yang sama - template sebelum / sesudah file bagian tidak ada dalam tema induk sama sekali dan apakah ada hanya untuk memungkinkan mereka untuk memasukkan kode - dan metode ini tidak mengharuskan mereka memahami kait / filter untuk mencapai ini.

Tentu saja saya dapat mencapai hal yang sama menggunakan kait dan filter.

Apakah ada keuntungan menggunakan kait / filter sebagai gantinya? Mengingat audiens target yang akan menggunakan ini jelas tidak memahami kode. Saya bisa memberi mereka instruksi yang relatif dasar yang dapat mereka ikuti untuk menggunakan metode template tetapi hampir pasti akan membingungkan iblis dari mereka dengan kait.

Atau ada situasi di mana satu akan lebih baik dari yang lain dalam tema yang sama?

Ashley G
sumber

Jawaban:

8

Saya lebih suka kait, karena mereka lebih fleksibel: Anda dapat menghubungkannya dari functions.phpfile tema Anda , tetapi juga dari plugin. Saya mencoba memasukkan logika sebanyak-banyaknya ke dalam plugin, sehingga temanya kebanyakan berisi tata letak.

Jika Anda menggunakan kait tindakan, masih mungkin untuk digunakan get_template_part() dalam penangan kait itu . Ini memberi Anda yang terbaik dari kedua dunia. Anda mungkin bahkan dapat membuat kait default yang memanggil get_template_part(), sehingga orang yang tidak memiliki banyak pengalaman dengan pengkodean dapat menambahkan file tambahan, dan orang lain dapat menghapus kait ini jika mereka tidak mau.

Mengenai kinerja: get_template_part()menggunakan ( dalamlocate_template() ) file_exists()satu, dua atau empat kali (tergantung bagaimana Anda menyebutnya). Tampaknya file_exists()sangat cepat , dan menggunakan caching di PHP dan mungkin bahkan di OS. Jadi itu mungkin bukan masalah.

Jan Fabry
sumber
Itu masuk akal. Bagian dari dorongan desain saya adalah untuk menghilangkan kebutuhan plugin dalam situasi penggunaan yang paling umum sementara tetap mempertahankan kemampuan untuk menggunakannya dengan mereka yang ingin. Klien target saya hanya tahu sedikit tentang WordPress atau plugin, tidak memenuhi syarat untuk memberi tahu plugin yang baik dari yang buruk (kelemahan utama dari plugin IMO) dan tidak mau harus berurusan dengan memperbarui dan mengelola beberapa perangkat lunak. Jadi saya harus membangun banyak fungsi langsung ke tema untuk memberikan apa yang mereka inginkan: mudah digunakan, mudah dirawat, solusi satu atap.
Ashley G
4

Saya akan mengatakan bahwa perbedaan utama adalah keterbacaan. Jika Anda melihat beberapa bagian templat yang bernama baik, Anda dapat memahami apa yang terjadi dengan mudah. Jika Anda hanya melihat sebuah kait, Anda perlu mencari melalui sisa tema untuk menentukan apa yang melekat pada hook.

Fuzz ringan
sumber
1
Ya, itu masuk akal, dan merupakan bagian dari apa yang saya coba capai dengan kode contoh.
Ashley G
4

Ini (relatif) mudah untuk menghapus fungsi dari tema hook in child, tetapi jauh lebih sulit untuk membuatnya mengabaikan templat induk yang tidak diinginkan.

Pada dasarnya bekerja dengan kait lebih dekat ke sisi PHP dan bekerja dengan template lebih dekat ke sisi HTML. Saya menggunakan tema induk Hybrid, yang sangat berorientasi pada kait. Ini adalah kebahagiaan yang tepat sampai Anda perlu menyingkirkan template beberapa orangtua.

Bagi pengguna yang tidak mengerti teknologi juga bukan pilihan yang sangat bagus. Mengapa mereka harus mengacaukan tema internal seperti itu?

PS juga mencatat masalah kinerja. Hal-hal dengan kait terjadi dalam memori, hal-hal dengan template membutuhkan banyak pencarian disk. Terutama jika Anda menulis sesuatu seperti dalam contoh Anda.

PPS bukan preferensi semua orang ... tetapi alih-alih menulis tema induk dari awal mengapa tidak mengambil tema induk yang ada dan memberikan tema anak yang sederhana kepada pengguna?

Jarang
sumber
Mengabaikan templat induk akan semudah membuat file templat kosong untuk menggantinya, saya akan berpikir. Jauh lebih mudah daripada bermain-main dengan kait (dan karenanya PHP) untuk pengguna yang tidak mengerti teknologi. Meskipun bagi seseorang dengan pengalaman kait akan jauh lebih mudah. Seperti mengapa, selalu ada orang yang ingin menyesuaikan, Anda bahkan mengakui Anda melakukannya. Mengenai mengapa saya membuat tema, itu adalah arah yang saya inginkan untuk membawa bisnis saya. Membangun di sekitar bisnis orang lain tampaknya bukan bukti masa depan bagi saya, juga karena IMO sebagian besar tema yang ada meninggalkan banyak yang harus diinginkan. Saya pikir saya bisa melakukan yang lebih baik.
Ashley G
Poin bagus tentang masalah kinerja. Meskipun, karena wordpress dirancang untuk bekerja dengan get_template_part, saya akan berpikir itu tidak akan menjadi hit kinerja. Adakah yang punya tolok ukur dalam hal ini?
Ashley G
Saya mengerti maksud Anda tentang mengabaikan bagian templat. Tidak semudah yang saya kira
Ashley G
Sebenarnya itu semudah menempatkan file template kosong di folder anak, asalkan itu di root folder. Di mana menjadi sulit adalah ketika file templat berada dalam subfolder dari folder tema induk / anak
Ashley G
Sebenarnya, bahkan subfolder tidak menjadi masalah. Saya baru saja folder bernama salah (pertanda pasti saya bekerja LOL terlambat). Untuk mengganti bagian templat, itu hanya memerlukan file dengan nama yang sama di jalur yang sama pada anak seperti pada induknya
Ashley G