15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
22.10.2024

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 TemplateDipicu KetikaFallback Ke
front-page.phpHalaman depan statis diatur di Settings > Readinghome.php
home.phpHalaman indeks posting blogindex.php
single-{post-type}.phpPosting tunggal dari jenis posting kustom tertentusingle.php
single.phpPosting tunggal apa pun (jenis posting default)singular.php
singular.phpPosting atau halaman tunggal apa pun (catch-all generik)index.php
page-{slug}.phpHalaman tertentu berdasarkan slugpage-{ID}.php
page-{ID}.phpHalaman tertentu berdasarkan ID databasepage.php
page.phpHalaman statis apa punsingular.php
category-{slug}.phpArsip kategori berdasarkan slugcategory-{ID}.php
category-{ID}.phpArsip kategori berdasarkan ID termcategory.php
category.phpArsip kategori apa punarchive.php
tag-{slug}.phpArsip tag berdasarkan slugtag-{ID}.php
tag.phpArsip tag apa punarchive.php
taxonomy-{tax}-{term}.phpTaksonomi kustom, term tertentutaxonomy-{tax}.php
taxonomy-{tax}.phpTaksonomi kustom, term apa puntaxonomy.php
taxonomy.phpArsip taksonomi kustom apa punarchive.php
author-{nicename}.phpArsip penulis berdasarkan nicename penggunaauthor-{ID}.php
author-{ID}.phpArsip penulis berdasarkan ID penggunaauthor.php
author.phpArsip penulis apa punarchive.php
archive-{post-type}.phpArsip jenis posting kustomarchive.php
archive.phpArsip apa pun (tanggal, penulis, taksonomi)index.php
date.phpArsip berbasis tanggalarchive.php
search.phpHalaman hasil pencarianindex.php
404.phpTidak ada konten yang cocok ditemukanindex.php
attachment.phpHalaman lampiran tunggalsingle.php
embed.phpFrame oEmbed untuk sebuah postingindex.php
index.phpFallback 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-post-{slug}.php (WordPress 4.4+, misalnya single-post-hello-world.php)
    single-post.php
  1. single.php
  2. singular.php
  3. index.php

Varian 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:

  1. single-portfolio-{slug}.php
  2. single-portfolio.php
  3. single.php
  4. singular.php
  5. index.php

Untuk arsipnya (memerlukan 'has_archive' => true di register_post_type()):

  1. archive-portfolio.php
  2. archive.php
  3. index.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

  1. File template yang diatur melalui kotak meta Page Attributes (template halaman kustom)
  2. page-{slug}.php
  3. page-{ID}.php
  4. page.php
  5. singular.php
  6. index.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

  1. category-{slug}.php
  2. category-{ID}.php
  3. category.php
  4. archive.php
  5. index.php

Arsip Taksonomi Kustom

Untuk taksonomi yang didaftarkan sebagai genre dengan slug term thriller:

  1. taxonomy-genre-thriller.php
  2. taxonomy-genre.php
  3. taxonomy.php
  4. archive.php
  5. index.php

Arsip Penulis

  1. author-{user_nicename}.php
  2. author-{user_ID}.php
  3. author.php
  4. archive.php
  5. index.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"):

  1. front-page.php
  2. home.php
  3. index.php

Skenario B — Halaman statis sebagai halaman depan (Settings > Reading: "A static page"):

  1. front-page.php
  2. page.php (jika tidak ada front-page.php)
    index.php

Nuansa 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:

  1. search.php
  2. index.php

Halaman error 404:

  1. 404.php
  2. index.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/
  • Direktori template plugin sendiri
  • 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.json

    Logika 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:

    1. Template yang disimpan pengguna di database (jenis posting wp_template)
    2. File HTML direktori templates/ tema
    3. File HTML direktori templates/ parent theme
    4. 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.php

    Matriks Keputusan: Kapan Menggunakan Pendekatan Kustomisasi Mana

    SkenarioPendekatan yang DirekomendasikanHindari
    Mengganti satu kategori tertentuBuat category-{slug}.php di temaMemodifikasi archive.php secara langsung
    Mengganti satu halaman tertentuBuat page-{slug}.php atau gunakan header template kustomMengedit page.php
    Memodifikasi template WooCommerceSalin ke direktori theme/woocommerce/Mengedit file plugin
    Memodifikasi template parent themeBuat file identik di child themeMengedit file parent theme
    Menerapkan logika ke beberapa jenis halamanGunakan conditional tag dalam template bersamaMenduplikasi kode di seluruh template
    Menyuntikkan template dari pluginGunakan filter _{$type}_template_hierarchyHardcoding jalur di file tema
    Mengganti template apa pun sebagai upaya terakhirGunakan filter template_includeMenggunakan exit() atau die() di template
    Kustomisasi block themeGunakan Site Editor atau file HTML templates/Mencampur template PHP dan block HTML

    Poin Teknis Utama

    • index.php adalah wajib. Setiap tema harus menyertakannya. Ini adalah fallback universal yang mengakhiri setiap rantai resolusi.
    • singular.php adalah lapisan tengah yang kurang dimanfaatkan. Template ini menangkap posting atau halaman tunggal apa pun ketika single.php maupun page.php tidak ada. Gunakan di tema minimal untuk mengurangi jumlah file.
    • front-page.php menggantikan 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.php tidak akan cocok ketika WordPress mencari category-news.php. Ini adalah kegagalan diam yang sulit di-debug tanpa Query Monitor.
    • Filter template_include adalah 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.php child 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_files melebihi 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.

    15%

    Hemat 15% di Semua Layanan Hosting

    Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

    Gunakan kode:

    Skills
    Memulai