Hierarki Template WordPress: Panduan Teknis Lengkap
WordPress's Template Hierarchy adalah sistem resolusi deterministik yang digunakan WordPress untuk memilih file template PHP mana yang merender permintaan halaman tertentu. Ketika pengunjung memuat URL apa pun di situs Anda, WordPress mengevaluasi konteks kueri — jenis posting, taksonomi, slug, ID, dan lainnya — kemudian menelusuri daftar nama file kandidat yang diprioritaskan hingga menemukan kecocokan di direktori tema aktif Anda. Jika tidak ada template spesifik yang ada, sistem akan kembali ke index.php.
Memahami sistem ini secara mendalam bukanlah pilihan untuk pengembangan WordPress yang serius. Ini adalah fondasi dari setiap tata letak kustom, setiap penggantian tema, dan setiap optimasi performa yang melibatkan caching template. Baik Anda menjalankan publikasi konten berat, toko WooCommerce, atau pengaturan WordPress headless, hierarki mengatur PHP apa yang dieksekusi pada setiap pemuatan halaman.
Apa Sebenarnya Template Hierarchy Itu
Pada intinya, Template Hierarchy adalah rantai pencarian yang tertanam dalam inti WordPress (wp-includes/class-wp-query.php dan wp-includes/template.php). Ketika WordPress selesai mengurai permintaan dan mengisi objek $wp_query global, ia memanggil ekuivalen get_template_part() secara internal untuk menyelesaikan template yang benar. Resolusinya tidak acak — ini adalah daftar nama file yang ketat dan terurut yang diperiksa terhadap direktori root tema Anda.
Wawasan arsitektur utama yang sering dilewatkan oleh sebagian besar tutorial: WordPress tidak memindai direktori tema Anda. WordPress membangun array nama file kandidat yang diprioritaskan berdasarkan variabel kueri, kemudian memeriksa setiap file menggunakan locate_template(). Perbedaan ini penting ketika Anda men-debug template yang hilang atau membangun generator tema terprogram.
Rantai fallback selalu berakhir di index.php. File ini adalah satu-satunya file template yang WordPress haruskan ada di setiap tema, sesuai standar pengembangan tema.
File Template Inti yang Harus Dipahami Setiap Tema
| File Template | Dipicu Ketika | Fallback Ke |
|---|---|---|
front-page.php | Halaman depan statis diatur di Settings > Reading | home.php |
home.php | Halaman indeks posting blog | index.php |
single-{post-type}.php | Posting tunggal dari jenis posting kustom tertentu | single.php |
single.php | Posting tunggal apa pun (jenis posting default) | singular.php |
singular.php | Posting atau halaman tunggal apa pun (catch-all generik) | index.php |
page-{slug}.php | Halaman tertentu berdasarkan slug | page-{ID}.php |
page-{ID}.php | Halaman tertentu berdasarkan ID database | page.php |
page.php | Halaman statis apa pun | singular.php |
category-{slug}.php | Arsip kategori berdasarkan slug | category-{ID}.php |
category-{ID}.php | Arsip kategori berdasarkan ID term | category.php |
category.php | Arsip kategori apa pun | archive.php |
tag-{slug}.php | Arsip tag berdasarkan slug | tag-{ID}.php |
tag.php | Arsip tag apa pun | archive.php |
taxonomy-{tax}-{term}.php | Taksonomi kustom, term tertentu | taxonomy-{tax}.php |
taxonomy-{tax}.php | Taksonomi kustom, term apa pun | taxonomy.php |
taxonomy.php | Arsip taksonomi kustom apa pun | archive.php |
author-{nicename}.php | Arsip penulis berdasarkan nicename pengguna | author-{ID}.php |
author-{ID}.php | Arsip penulis berdasarkan ID pengguna | author.php |
author.php | Arsip penulis apa pun | archive.php |
archive-{post-type}.php | Arsip jenis posting kustom | archive.php |
archive.php | Arsip apa pun (tanggal, penulis, taksonomi) | index.php |
date.php | Arsip berbasis tanggal | archive.php |
search.php | Halaman hasil pencarian | index.php |
404.php | Tidak ada konten yang cocok ditemukan | index.php |
attachment.php | Halaman lampiran tunggal | single.php |
embed.php | Frame oEmbed untuk sebuah posting | index.php |
index.php | Fallback universal | — |
Perhatikan entri singular.php — ini adalah template yang sering diabaikan oleh banyak pengembang. Diperkenalkan di WordPress 4.3, template ini berada di antara single.php/page.php dan index.php dalam hierarki, bertindak sebagai catch-all terpadu untuk tampilan konten tunggal apa pun. Jika tema Anda menyertakan singular.php, template ini akan menangkap kasus di mana single.php maupun page.php tidak ada.
Urutan Resolusi Template Lengkap Berdasarkan Jenis Halaman
Posting Blog Tunggal
Ketika pengunjung meminta posting standar (post_type = 'post'), WordPress memeriksa dalam urutan yang tepat ini:
single.phpsingular.phpindex.php
single-post-{slug}.php (WordPress 4.4+, misalnya single-post-hello-world.php)
single-post.phpVarian berbasis slug pada langkah 1 jarang didokumentasikan tetapi sangat berguna untuk memberikan satu posting unggulan tata letak yang benar-benar unik tanpa menyentuh template lain apa pun.
Jenis Posting Kustom
Untuk jenis posting kustom yang didaftarkan sebagai portfolio:
single-portfolio-{slug}.phpsingle-portfolio.phpsingle.phpsingular.phpindex.php
Untuk arsipnya (memerlukan 'has_archive' => true di register_post_type()):
archive-portfolio.phparchive.phpindex.php
Kesalahan umum: mendaftarkan jenis posting kustom dengan 'has_archive' => false (default) dan kemudian bertanya-tanya mengapa archive-portfolio.php tidak pernah dimuat. URL arsip hanya mengembalikan 404 dalam kasus tersebut.
Halaman Statis
- File template yang diatur melalui kotak meta Page Attributes (template halaman kustom)
page-{slug}.phppage-{ID}.phppage.phpsingular.phpindex.php
Template halaman kustom adalah file PHP di direktori tema Anda yang menyertakan komentar header file:
<?php
/**
* Template Name: Full Width Layout
* Template Post Type: page
*/Deklarasi Template Post Type (WordPress 4.7+) membatasi jenis posting mana yang dapat menggunakan template ini dari editor. Tanpanya, template muncul di dropdown Page Attributes hanya untuk halaman.
Arsip Kategori
category-{slug}.phpcategory-{ID}.phpcategory.phparchive.phpindex.php
Arsip Taksonomi Kustom
Untuk taksonomi yang didaftarkan sebagai genre dengan slug term thriller:
taxonomy-genre-thriller.phptaxonomy-genre.phptaxonomy.phparchive.phpindex.php
Arsip Penulis
author-{user_nicename}.phpauthor-{user_ID}.phpauthor.phparchive.phpindex.php
Halaman Depan (Kasus Edge yang Kritis)
Ini adalah bagian hierarki yang paling sering disalahpahami. WordPress membedakan antara dua skenario halaman depan:
Skenario A — Indeks posting blog sebagai halaman depan (Settings > Reading: "Your latest posts"):
front-page.phphome.phpindex.php
Skenario B — Halaman statis sebagai halaman depan (Settings > Reading: "A static page"):
front-page.php
page.php (jika tidak ada front-page.php)
index.phpNuansa kritis: front-page.php mengambil prioritas dalam kedua skenario. Jika front-page.php ada di tema Anda, template ini selalu merender halaman depan terlepas dari pengaturan Reading. Hal ini mengejutkan banyak pengembang yang membuat front-page.php untuk halaman beranda statis tetapi lupa bahwa template ini juga akan menggantikan indeks blog jika mereka kemudian mengubah pengaturan.
Hasil Pencarian dan 404
Hasil pencarian:
search.phpindex.php
Halaman error 404:
404.phpindex.php
404.php yang dibuat dengan baik adalah aset konversi, bukan sekadar tambahan. Template ini harus menyertakan formulir pencarian, tautan konten populer, dan navigasi yang jelas — yang semuanya memerlukan pemahaman sistem template untuk diimplementasikan dengan benar.
Cara WordPress Menyelesaikan Template Secara Internal
Memahami mekanisme internal membantu saat men-debug atau memperluas sistem. Proses resolusi di wp-includes/template.php bekerja sebagai berikut:
// Simplified representation of WordPress template resolution
function get_query_template( $type, $templates = array() ) {
$type = preg_replace( '|[^a-z0-9-]+|', '', $type );
if ( empty( $templates ) ) {
$templates = array( "{$type}.php" );
}
// Fires before template resolution — allows plugins/themes to modify the list
$templates = apply_filters( "_{$type}_template_hierarchy", $templates );
$template = locate_template( $templates );
// Fires after template is located — allows final override
$template = apply_filters( "{$type}_template", $template, $type, $templates );
return $template;
}Dua filter hook sangat penting di sini:
_{$type}_template_hierarchy — dijalankan sebelum pencarian file, memungkinkan Anda menyuntikkan kandidat tambahan ke dalam array
{$type}_template — dijalankan setelah file ditemukan, memungkinkan Anda menukar jalur template yang telah diselesaikan sepenuhnya
Hook-hook ini adalah cara plugin page builder, jaringan multisite, dan WooCommerce mengganti template tanpa menyentuh file tema.
Mengganti Template Hierarchy Secara Terprogram
Menyuntikkan Jalur Template Kustom
add_filter( 'single_template_hierarchy', function( $templates ) {
// Prepend a plugin-directory template before theme templates are checked
if ( is_singular( 'portfolio' ) ) {
array_unshift( $templates, plugin_dir_path( __FILE__ ) . 'templates/single-portfolio.php' );
}
return $templates;
} );
Mengganti Template Setelah Resolusi
add_filter( 'template_include', function( $template ) {
if ( is_singular( 'portfolio' ) && current_user_can( 'edit_posts' ) ) {
// Load a debug template for editors
$debug_template = get_stylesheet_directory() . '/debug/single-portfolio-debug.php';
if ( file_exists( $debug_template ) ) {
return $debug_template;
}
}
return $template;
} );
Filter template_include adalah hook terakhir sebelum WordPress memuat file template. Filter ini menerima jalur yang telah sepenuhnya diselesaikan dan harus mengembalikan jalur file yang valid.
Bagian Template dan Fungsi get_template_part()
Bagian template adalah fragmen PHP yang dapat digunakan kembali yang dimuat melalui get_template_part(). Bagian template mengikuti mini-hierarki mereka sendiri:
// Loads content-video.php if it exists, falls back to content.php
get_template_part( 'template-parts/content', 'video' );
WordPress 5.5 menambahkan parameter ketiga untuk meneruskan data ke bagian template:
get_template_part( 'template-parts/card', 'product', array(
'post_id' => get_the_ID(),
'show_price' => true,
) );
Di dalam bagian template, ambil data ini dengan:
$args = wp_parse_args( $args, array(
'post_id' => 0,
'show_price' => false,
) );
Ini menghilangkan kebutuhan untuk menggunakan variabel global untuk meneruskan data antar template — peningkatan signifikan untuk pemeliharaan dan kemampuan pengujian.
Child Theme dan Sistem Penggantian Template
Child theme memperluas hierarki dengan menambahkan direktori child theme ke awal jalur pencarian template. Ketika locate_template() berjalan, ia memeriksa:
Direktori child theme (get_stylesheet_directory())
Direktori parent theme (get_template_directory())
Ini berarti Anda dapat mengganti template parent theme mana pun dengan membuat file dengan nama yang identik di child theme Anda. Anda tidak perlu menyalin seluruh file — hanya bagian yang ingin Anda ubah — tetapi WordPress memuat file sebagai satu unit lengkap, sehingga Anda harus menyertakan semua markup yang diperlukan.
Kesalahan umum child theme: Menyalin functions.php dari parent theme ke child theme dan mengharapkannya menggantikan fungsi parent. Tidak seperti file template lainnya, functions.php di child theme dimuat sebagai tambahan dari functions.php parent, bukan sebagai gantinya. Kedua file dieksekusi.
Untuk membuat struktur child theme minimal:
my-child-theme/
├── style.css (required — contains theme header comment)
├── functions.php (optional — enqueue parent styles here)
└── single-post.php (overrides parent's single-post.php)
Header style.css harus mendeklarasikan parent:
/*
Theme Name: My Child Theme
Template: parent-theme-directory-name
*/
Men-debug Template Mana yang Aktif
Metode 1: Plugin Query Monitor
Plugin Query Monitor (gratis, WordPress.org) menampilkan file template yang diselesaikan dan hierarki kandidat lengkap di panel toolbar admin-nya. Ini adalah alat debugging paling andal yang tersedia dan menambahkan overhead yang dapat diabaikan.
Metode 2: Hook template_include
add_filter( 'template_include', function( $template ) {
if ( current_user_can( 'manage_options' ) ) {
echo '<!-- Template: ' . esc_html( str_replace( ABSPATH, '', $template ) ) . ' -->';
}
return $template;
} );
Ini menghasilkan jalur template sebagai komentar HTML yang hanya terlihat oleh administrator. Hapus sebelum diterapkan ke produksi.
Metode 3: WP_DEBUG dan Logging
Di server pengembangan, aktifkan logging debug di wp-config.php:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Kemudian tambahkan logging sementara di dalam template_include:
add_filter( 'template_include', function( $template ) {
error_log( 'Resolved template: ' . $template );
return $template;
} );
Di lingkungan VPS Hosting dengan akses root, Anda dapat memantau log debug secara real time:
tail -f /var/www/html/wp-content/debug.log
Pendekatan ini jauh lebih andal daripada mengandalkan alat debugging berbasis browser saat memecahkan masalah resolusi template di server live atau staging.
WooCommerce dan Sistem Penggantian Template
WooCommerce hadir dengan hierarki template sendiri yang berada di atas sistem native WordPress. Template WooCommerce berada di wp-content/plugins/woocommerce/templates/ dan dimuat melalui fungsi wc_get_template() miliknya sendiri, yang memeriksa penggantian di:
wp-content/themes/your-theme/woocommerce/wp-content/themes/your-child-theme/woocommerce/Untuk mengganti template produk tunggal WooCommerce, salin woocommerce/templates/single-product.php ke your-theme/woocommerce/single-product.php. Jangan pernah mengedit file template plugin secara langsung — file tersebut akan ditimpa pada setiap pembaruan plugin.
WooCommerce juga mengaitkan ke action hook woocommerce_template_single_*, yang memberi Anda kontrol granular atas bagian individual (harga, tab, tombol tambah ke keranjang) tanpa mengganti seluruh file template. Ini adalah pendekatan yang lebih disukai untuk modifikasi kecil.
Block Theme dan Template Hierarchy dalam Full Site Editing
WordPress 5.9 memperkenalkan Full Site Editing (FSE) dengan block theme, yang mengubah cara kerja hierarki template dalam praktiknya. Block theme menyimpan template sebagai file HTML di direktori templates/ daripada file PHP:
my-block-theme/
├── templates/
│ ├── index.html
│ ├── single.html
│ ├── page.html
│ ├── archive.html
│ └── 404.html
├── parts/
│ ├── header.html
│ └── footer.html
└── theme.jsonLogika resolusi mengikuti aturan hierarki yang sama, tetapi WordPress kini juga memeriksa database untuk template yang dikustomisasi pengguna yang disimpan melalui Site Editor. Urutan pencarian menjadi:
- Template yang disimpan pengguna di database (jenis posting
wp_template) - File HTML direktori
templates/tema - File HTML direktori
templates/parent theme - Template fallback bawaan WordPress
Tema PHP klasik dan block theme dapat hidup berdampingan dalam instalasi WordPress, tetapi Anda tidak dapat mencampur template PHP dan template block HTML dalam satu tema. Jika tema Anda memiliki direktori templates/ dan theme.json yang valid, WordPress memperlakukannya sebagai block theme.
Untuk tim yang menjalankan beban kerja kritis performa di Dedicated Server, memahami perbedaan ini sangat penting saat mengevaluasi kerangka tema — block theme memindahkan rendering template ke block parser, yang memiliki karakteristik caching berbeda dari eksekusi template PHP.
Implikasi Performa dari Template Hierarchy
Setiap resolusi template melibatkan pemeriksaan filesystem melalui locate_template(). Di situs dengan lalu lintas tinggi, ini dapat menambahkan overhead yang terukur jika tidak di-cache. Optimasi utama:
Object caching: Gunakan object cache persisten (Redis atau Memcached) untuk meng-cache hasil WP_Query dan mengurangi jumlah kueri database yang masuk ke pemilihan template.
OPcache: Pastikan PHP OPcache diaktifkan dan dikonfigurasi dengan benar. Karena template adalah file PHP, OPcache mengompilasinya ke bytecode pada pemuatan pertama dan melayani permintaan berikutnya dari memori. Di VPS dengan cPanel yang dikonfigurasi dengan benar, OPcache biasanya diaktifkan secara default tetapi mungkin memerlukan penyesuaian opcache.memory_consumption dan opcache.max_accelerated_files untuk tema besar dengan banyak file template.
Hindari file template yang tidak perlu: Setiap file template di direktori tema Anda adalah kandidat yang harus diperiksa oleh locate_template(). Tema dengan ratusan file template (umum di tema komersial yang membengkak) meningkatkan I/O filesystem pada setiap permintaan yang tidak di-cache. Audit tema Anda dan hapus template yang tidak digunakan.
Full-page caching: Alat seperti WP Rocket, W3 Total Cache, atau caching tingkat server (Nginx FastCGI cache, Varnish) melewati eksekusi template PHP sepenuhnya untuk pengguna anonim. Resolusi hierarki template hanya berjalan ketika cache tidak menemukan data.
Pola Kustomisasi Praktis
Pola 1: Tata Letak Spesifik Kategori Tanpa Plugin
Buat category-news.php di direktori tema Anda. WordPress secara otomatis menggunakannya untuk arsip kategori “news”. Tidak ada plugin, tidak ada filter hook — hanya file dengan nama yang benar.
<?php
/**
* Template for the "news" category archive.
* Inherits from: category.php → archive.php → index.php
*/
get_header();
?>
<main class="news-archive">
<h1><?php single_cat_title(); ?></h1>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'template-parts/card', 'news' ); ?>
<?php endwhile; endif; ?>
<?php the_posts_pagination(); ?>
</main>
<?php get_footer(); ?>Pola 2: Tata Letak Per-Penulis untuk Kontributor Unggulan
// author-jane-smith.php — loads only for the author with nicename "jane-smith"
get_header();
?>
<div class="featured-author-layout">
<?php get_template_part( 'template-parts/author', 'featured' ); ?>
<!-- Custom bio section, social links, etc. -->
</div>
<?php get_footer(); ?>Pola 3: Logika Kondisional di Dalam index.php
Jika Anda membangun tema minimal dan ingin menghindari beberapa file template, Anda dapat menggunakan conditional tag di dalam index.php:
<?php get_header(); ?>
<?php if ( is_front_page() && is_home() ) : ?>
<?php get_template_part( 'template-parts/home', 'blog-index' ); ?>
<?php elseif ( is_front_page() ) : ?>
<?php get_template_part( 'template-parts/home', 'static' ); ?>
<?php elseif ( is_single() ) : ?>
<?php get_template_part( 'template-parts/content', get_post_type() ); ?>
<?php elseif ( is_archive() ) : ?>
<?php get_template_part( 'template-parts/archive', 'default' ); ?>
<?php else : ?>
<?php get_template_part( 'template-parts/content', 'none' ); ?>
<?php endif; ?>
<?php get_footer(); ?>Pola ini digunakan oleh tema seperti Twenty Twenty-One dan sepenuhnya valid. Pertimbangannya adalah satu index.php yang besar menjadi lebih sulit dipelihara seiring bertambahnya kompleksitas.
Multisite dan Template Hierarchy
Dalam jaringan WordPress Multisite, setiap situs dalam jaringan dapat menggunakan tema aktif yang berbeda. Hierarki template beroperasi secara identik per situs, tetapi plugin yang diaktifkan di jaringan dapat menggunakan filter template_include atau _{$type}_template_hierarchy untuk menyuntikkan template bersama ke semua situs tanpa menduplikasi file tema.
Pola multisite yang umum adalah direktori “template jaringan” di luar web root yang direferensikan melalui filter hook tingkat plugin. Ini memungkinkan tim desain pusat untuk mendorong pembaruan template ke semua situs secara bersamaan — keuntungan operasional yang signifikan bagi agensi yang mengelola puluhan situs klien di satu lingkungan Shared Web Hosting atau VPS.
SSL, Keamanan, dan Izin File Template
File template adalah PHP dan harus diperlakukan sebagai kode yang dapat dieksekusi. Izin file yang salah adalah vektor serangan yang umum. Di server Linux, file template tema harus dimiliki oleh pengguna web server (biasanya www-data atau nginx) dan diatur ke mode 644:
find /var/www/html/wp-content/themes/your-theme -type f -name "*.php" -exec chmod 644 {} ;
find /var/www/html/wp-content/themes/your-theme -type d -exec chmod 755 {} ;Jangan pernah mengatur file PHP ke 777. Jika file template memerlukan akses tulis (tidak biasa dan umumnya tidak disarankan), gunakan 664 dengan kepemilikan grup yang tepat.
Memasangkan instalasi WordPress Anda dengan Sertifikat SSL yang valid memastikan bahwa konten yang dirender oleh template — termasuk halaman yang dihasilkan secara dinamis dengan data pengguna yang sensitif — selalu ditransmisikan melalui HTTPS. Ini tidak dapat dinegosiasikan untuk situs apa pun yang menggunakan formulir kontak, akun pengguna, atau e-commerce.
Referensi Template Hierarchy: Alur Visual
Request URL
|
v
WordPress Query Resolution (WP_Query)
|
+-- Is it the front page?
| front-page.php → home.php → index.php
|
+-- Is it a single post?
| single-{type}-{slug}.php → single-{type}.php → single.php → singular.php → index.php
|
+-- Is it a static page?
| [custom template] → page-{slug}.php → page-{ID}.php → page.php → singular.php → index.php
|
+-- Is it a category archive?
| category-{slug}.php → category-{ID}.php → category.php → archive.php → index.php
|
+-- Is it a custom taxonomy?
| taxonomy-{tax}-{term}.php → taxonomy-{tax}.php → taxonomy.php → archive.php → index.php
|
+-- Is it an author archive?
| author-{nicename}.php → author-{ID}.php → author.php → archive.php → index.php
|
+-- Is it a date archive?
| date.php → archive.php → index.php
|
+-- Is it search results?
| search.php → index.php
|
+-- Is it a 404?
404.php → index.phpMatriks Keputusan: Kapan Menggunakan Pendekatan Kustomisasi Mana
| Skenario | Pendekatan yang Direkomendasikan | Hindari |
|---|---|---|
| Mengganti satu kategori tertentu | Buat category-{slug}.php di tema | Memodifikasi archive.php secara langsung |
| Mengganti satu halaman tertentu | Buat page-{slug}.php atau gunakan header template kustom | Mengedit page.php |
| Memodifikasi template WooCommerce | Salin ke direktori theme/woocommerce/ | Mengedit file plugin |
| Memodifikasi template parent theme | Buat file identik di child theme | Mengedit file parent theme |
| Menerapkan logika ke beberapa jenis halaman | Gunakan conditional tag dalam template bersama | Menduplikasi kode di seluruh template |
| Menyuntikkan template dari plugin | Gunakan filter _{$type}_template_hierarchy | Hardcoding jalur di file tema |
| Mengganti template apa pun sebagai upaya terakhir | Gunakan filter template_include | Menggunakan exit() atau die() di template |
| Kustomisasi block theme | Gunakan Site Editor atau file HTML templates/ | Mencampur template PHP dan block HTML |
Poin Teknis Utama
index.phpadalah wajib. Setiap tema harus menyertakannya. Ini adalah fallback universal yang mengakhiri setiap rantai resolusi.singular.phpadalah lapisan tengah yang kurang dimanfaatkan. Template ini menangkap posting atau halaman tunggal apa pun ketikasingle.phpmaupunpage.phptidak ada. Gunakan di tema minimal untuk mengurangi jumlah file.front-page.phpmenggantikan segalanya untuk halaman depan, terlepas dari pengaturan Reading. Jika ada, template ini selalu dimuat — tanpa pengecualian.- Penamaan file bersifat case-sensitive di server Linux.
Category-News.phptidak akan cocok ketika WordPress mencaricategory-news.php. Ini adalah kegagalan diam yang sulit di-debug tanpa Query Monitor. - Filter
template_includeadalah penggantian utama. Filter ini dijalankan setelah semua resolusi hierarki selesai dan memberi Anda kesempatan terakhir untuk menukar template apa pun dengan alasan apa pun. - Block theme menyimpan template sebagai HTML, bukan PHP. Logika hierarki identik, tetapi format file dan struktur direktori berbeda secara fundamental dari tema klasik.
functions.phpchild theme dimuat sebagai tambahan dari parent, bukan sebagai gantinya. Semua file template lainnya mengikuti pola penggantian standar.- Penyesuaian OPcache penting pada skala besar. Di situs dengan lalu lintas tinggi, pastikan
opcache.max_accelerated_filesmelebihi total jumlah file PHP dalam instalasi WordPress Anda, termasuk semua template tema. - Template WooCommerce berada di luar hierarki WordPress. Template tersebut memerlukan alur kerja penggantian terpisah melalui subdirektori
woocommerce/di tema Anda. - Padukan pekerjaan kustomisasi template Anda dengan domain yang dikonfigurasi dengan benar dan Registrasi Domain untuk memastikan konsistensi URL kanonik di semua halaman yang dirender oleh template.
FAQ
Apa yang terjadi jika WordPress tidak dapat menemukan file template apa pun dalam hierarki?
WordPress selalu menemukan index.php karena diperlukan untuk setiap tema yang valid. Jika index.php tidak ada, WordPress melempar fatal error dan menampilkan halaman kosong atau error server. Ini adalah satu-satunya file template yang ketidakhadirannya merusak situs sepenuhnya.
Bisakah saya menggunakan hierarki template dalam plugin tanpa memodifikasi tema aktif?
Ya. Gunakan filter _{$type}_template_hierarchy untuk menambahkan jalur direktori plugin ke awal array kandidat sebelum locate_template() berjalan, atau gunakan template_include untuk menukar jalur template yang diselesaikan setelah resolusi. Inilah cara WooCommerce, bbPress, dan sebagian besar plugin utama menyuntikkan template mereka sendiri tanpa memerlukan modifikasi tema.
Mengapa front-page.php menggantikan indeks blog saya bahkan ketika saya mengatur “Your latest posts” di pengaturan Reading?
Karena front-page.php mengambil prioritas tanpa syarat untuk halaman depan dalam semua konfigurasi Reading. Jika Anda ingin indeks blog menggunakan home.php, ganti nama atau hapus front-page.php dari tema Anda. Di dalam front-page.php, gunakan is_home() untuk mendeteksi apakah halaman depan juga merupakan indeks blog dan merender sesuai kebutuhan.
Bagaimana cara mengetahui file template mana yang sedang digunakan WordPress untuk halaman tertentu?
Instal plugin Query Monitor. Plugin ini menampilkan jalur template yang diselesaikan dan hierarki kandidat lengkap di toolbar admin pada setiap pemuatan halaman. Atau, tambahkan filter template_include sementara yang menghasilkan jalur sebagai komentar HTML yang hanya terlihat oleh administrator.
Apakah hierarki template bekerja dengan cara yang sama di WordPress Multisite?
Logika resolusi per-situs identik. Setiap situs menyelesaikan template terhadap tema aktifnya sendiri. Perbedaannya ada di tingkat jaringan: plugin yang diaktifkan di jaringan dapat menggunakan filter hook untuk menyuntikkan template bersama ke semua situs, dan fungsi get_stylesheet_directory() mengembalikan jalur yang benar untuk tema aktif setiap situs individual, bukan jalur jaringan bersama.
