Bagaimana untuk menghubungkan templat arkib yang disesuaikan dengan pelbagai jenis artikel WordPress?

Bacaan 3 minit
2026-03-18
2026-06-04
2,022
Saya mendapat komisen apabila anda membeli-belah melalui pautan di bawah, tanpa sebarang kos tambahan kepada anda.

Struktur hierarki tema WordPress merupakan inti kekuatan dan fleksibilitinya, yang membolehkan pembangun mencipta halaman tampilan yang unik untuk pelbagai jenis kandungan dengan menggunakan peraturan penamaan fail yang khusus. Mekanisme yang sama juga berkesan untuk halaman arkib (iaitu, halaman senarai artikel). Adalah penting untuk memahami dan mengaplikasikannya dengan betul. archive-{post_type}.php Peraturan penamaan ini merupakan kunci untuk mencipta halaman senarai khusus untuk jenis artikel yang didefinisikan sendiri. Artikel ini akan menjelaskan secara sistematik proses lengkap, daripada prinsip asas hingga amalan, dan seterusnya kepada penyelesaian masalah yang mungkin timbul.

Memahami hierarki templat dan mekanisme halaman arkib

Apabila pengguna mengakses halaman senarai artikel, seperti halaman utama blog anda atau halaman katalog kategori tertentu, WordPress akan memulakan proses yang digelar “query utama” untuk mendapatkan artikel yang sesuai. Pada masa yang sama, ia akan mencari fail templat PHP yang paling sesuai berdasarkan konteks pertanyaan semasa, mengikut susunan keutamaan yang telah ditetapkan. Susunan ini dikenali sebagai “struktur hierarki templat”.

Untuk halaman arkib, corak pencarian laluan adalah tertentu. Jika pengguna mengakses halaman arkib jenis “artikel” yang lalai, WordPress akan mencari secara berurutan:archive-post.php -> archive.php -> index.phpSelagi fail pertama yang wujud ditemui, ia akan digunakan.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Menguasai Jenis Artikel Custom di WordPress: Panduan Langkah demi Langkah dari Penciptaan hingga Penerbitan

Inti dari mekanisme ini terletak pada… archive-{post_type}.phpDi sini… {post_type} Ia merupakan sebuah variabel yang perlu digantikan dengan nama pendaftaran jenis artikel tersebut. Sebagai contoh, untuk membuat halaman arkib bagi jenis artikel khusus yang dinamakan “Projek”, diperlukan sebuah nama yang merujuk kepada jenis artikel tersebut. archive-project.php Fail tersebut. Hanya jika fail ini tidak wujud, WordPress akan kembali ke versi yang lebih asas (versi umum). archive.phpIni memberi kami keupayaan untuk mengawal dengan tepat cara senarai jenis kandungan yang berbeza dipaparkan.

UltaHost – Penyedia Hosting untuk WordPress
Jaminan pemulangan wang dalam tempoh 30 hari, lebar jalur dan pangkalan data yang tidak terhad, perlindungan DDoS percuma, diskaun 50% untuk pembelian selama 3 tahun.

Mencipta templat arkib untuk jenis artikel khusus

Pastikan jenis artikel tersebut menyokong fungsi arkivan.

Prasyarat untuk membuat fail templat adalah jenis artikel khusus yang anda buat (Custom Post Type/CPT) mesti menyatakan dengan jelas bahawa ia menyokong penyimpanan arkib. Ini biasanya dilakukan semasa proses pengaturan jenis artikel tersebut. register_post_type Semasa mendaftarkan fungsi untuk CPT (Cost Per Task), ia dilakukan melalui pengaturan parameter.

Dalam array parameter fungsi pendaftaran,has_archive Parameter ini mengawal sama ada halaman arkib diaktifkan atau tidak. Tetapkan ia kepada… true Ia merupakan langkah yang penting dan tidak boleh diabaikan. Jika diatur untuk… false Atau tidak disetkan (nilai laluan ialah…) falseWalaupun anda telah membuat fail templat yang betul, WordPress tidak akan menjana URL yang sesuai untuk mengakses halaman arkib tersebut.

Berikut adalah contoh pendaftaran CPT (Common Practice Template) yang standard dan menyokong pengarkiban:

function my_register_custom_post_type() {
    $labels = array(
        'name' => '产品',
        'singular_name' => '产品',
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true, // 启用存档功能
        'rewrite' => array('slug' => 'products'), // 可选:自定义存档页URL别名
        'supports' => array('title', 'editor', 'thumbnail'),
        'menu_icon' => 'dashicons-cart',
    );
    register_post_type('product', $args);
}
add_action('init', 'my_register_custom_post_type');

Membina struktur dan kandungan fail templat

Setelah mengesahkan bahawa CPT menyokong pengarkiban, langkah seterusnya adalah membuat fail templat yang sesuai di dalam direktori tema acara anda. Nama fail mesti dipatuhi dengan ketat. archive-{post_type}.php Dalam format ini, dan… {post_type} Nama tersebut mesti sama sepenuhnya dengan nama yang digunakan semasa pendaftaran (termasuk perbezaan antara huruf besar dan kecil).

Diperoleh daripada WEB\nDisyorkan untuk membaca. Bermula dari kosong: Panduan Lengkap Pembangunan Tema WordPress dan perkongsian Amalan Terbaik

Di dalam fail ini, anda boleh menggunakan tag templat dan pengulangan (loop) WordPress seperti yang anda lakukan semasa membina templat halaman lain. Ini merupakan versi asas yang lengkap. archive-product.php Mungkin seperti berikut:

<?php
/**
 * 模板名称:产品存档页
 * 用于展示“product”自定义文章类型的文章列表
 */
get_header(); ?>

<main id="primary" class="site-main">
    <header class="archive-header page-header">
        &lt;?php
            the_archive_title( &#039;<h1 class="archive-title page-title">', '</h1>' );
            the_archive_description( '<div class="archive-description">', '</div>' );
        ?&gt;
    </header>

<?php if ( have_posts() ) : ?>
        <div class="product-archive-wrapper">
            <?php
            while ( have_posts() ) :
                the_post();
                ?>
                <article id="post-<?php the_ID(); ?>" no numeric noise key 1012>
                    <a href="/ms/</?php the_permalink(); ?>" class="product-thumbnail-link">
                        
                    </a>
                    <div class="product-content">
                        <h2 class="product-title">
                            <a href="/ms/</?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </h2>
                        <div class="product-excerpt">
                            <?php the_excerpt(); ?>
                        </div>
                        <a href="/ms/</?php the_permalink(); ?>" class="read-more-link">Lihat butiran</a>
                    </div>
                </article>
            <?php endwhile; ?>
        </div>

2,
            'prev_text' =&gt; __( '上一页', 'textdomain' ),
            'next_text' =&gt; __( '下一页', 'textdomain' ),
        ) );
        ?&gt;
        <section class="no-products">
            <p>Maaf, tiada produk yang ditemui pada masa ini.</p>
        </section>
    <?php endif; ?>
</main>

&lt;?php
get_sidebar();
get_footer();

Teknik Kawalan Lanjutan dan Penyesuaian

Menggunakan penilaian syarat dalam templat arkib umum

Kadang-kadang, anda mungkin ingin beberapa jenis artikel yang berbeza untuk berkongsi maklumat yang sama. archive.php Fail-fail tersebut memaparkan kandungan yang berbeza berdasarkan jenisnya. Pada masa ini, tag bersyarat (Conditional Tags) dalam WordPress menjadi sangat berguna.

Syarat yang paling berkaitan adalah… is_post_type_archive() Fungsi. Anda boleh… archive.php Ia digunakan untuk menyesuaikan tajuk, deskripsi, atau struktur berulang (loop) bagi pelbagai CPT (Cost Per Task).

hosting.com Hosting Bersama
Prestasi tinggi, menampilkan CPU AMD EPYC, storan SSD NVMe dan LiteSpeed, dengan sokongan pakar dalaman 24/7, langkah keselamatan canggih termasuk SSL, perlindungan serangan paksa kata laluan, perisian hasad dan DDoS, menjimatkan sehingga 73%.
// 在 archive.php 文件内
if ( is_post_type_archive('product') ) {
    echo '<h1>Produk dan penyelesaian kami</h1>';
    get_template_part('template-parts/loop', 'product-grid');
} elseif ( is_post_type_archive('event') ) {
    echo '<h1>Acara dan Seminar Terkini</h1>';
    get_template_part('template-parts/loop', 'event-list');
} else {
    // 默认的文章存档(博客)
    echo '<h1>Blog dan Maklumat</h1>';
    get_template_part('template-parts/loop', 'default');
}

Menggunakan “hook” untuk mengubah kueri halaman arkib

Mengubah kod gelung secara langsung dalam fail templat hanya akan mengubah gaya penampilan kandungan yang dihasilkan. Jika anda ingin mengubah logik pengambilan artikel pada halaman arkib, seperti mengubah bilangan artikel setiap halaman, kaedah pengurutan, atau menapis artikel tertentu, anda mesti menggunakan kaedah yang lebih terstruktur dan berstruktur. pre_get_posts Action hooks. Ini adalah kaedah yang disyorkan oleh WordPress, yang dapat memastikan kerjasama yang baik dengan ciri-ciri seperti pengepilan halaman (pagination).

Contoh kod di bawah menunjukkan bagaimana untuk mengubah kueri utama pada halaman arkib “Produk” agar ia disusun mengikut medan yang ditentukan oleh pengguna, dan menunjukkan 9 item setiap halaman:

function customize_product_archive_query($query) {
    // 确保只在非管理后台、主查询、且是产品存档页时生效
    if ( ! is_admin() && $query->is_main_query() && is_post_type_archive('product') ) {
        $query->set('posts_per_page', 9); // 每页9个产品
        $query->set('orderby', 'meta_value_num'); // 按数字元字段排序
        $query->set('meta_key', 'product_price'); // 指定元字段键
        $query->set('order', 'ASC'); // 升序排列
    }
}
add_action('pre_get_posts', 'customize_product_archive_query');

Pemberitahuan penting: Elakkan sepenuhnya menggunakan dalam fail templat. query_posts() Mengubah kueri utama boleh merosakkan objek kueri tersebut dan menyebabkan masalah seperti ralat pengepilan halaman (pagination), isu keserasian dengan plugin, dan lain-lain.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Lengkap Pembangunan Laman Web E-dagang WooCommerce: Dari Penubuhan Hingga Pelaksanaan Fungsi Lanjutan

Mengambil fail templat yang berbeza secara dinamik

Untuk senario yang lebih kompleks, anda boleh menggunakan… template_include Penapis digunakan untuk menentukan secara dinamik fail templat mana yang perlu dimuatkan. Ini membolehkan anda menukar templat berdasarkan sebarang syarat, seperti peranan pengguna, parameter URL, masa, dan sebagainya.

Sebagai contoh, halaman arkib untuk “Produk” akan memuatkan templat yang berbeza di bawah keadaan tertentu:

Hosting Bersama InterServer
Hosting kongsi: 1TB/bulan pada $2.50 USD, bulan pertama pada $0.10 USD dengan kod promo tryinterserver. 461 skrip aplikasi awan tersedia untuk pemasangan satu klik.
function load_special_product_archive_template($template) {
    if ( is_post_type_archive('product') && some_custom_condition() ) {
        $new_template = locate_template('archive-product-special.php');
        if ( ! empty($new_template) ) {
            return $new_template;
        }
    }
    return $template;
}
add_filter('template_include', 'load_special_product_archive_template');

Pembaikan Ralat dan Amalan Terbaik

Walaupun semua langkah telah diikuti, kadangkala templat arkip mungkin masih tidak berfungsi dengan betul. Berikut adalah senarai pemeriksaan yang sistematik:

1. Memperbaharui pautan tetap (Fixed Links): Ini adalah langkah yang paling biasa dan utama. Masuk ke panel kawalan WordPress (WordPress Dashboard), kemudian ke “Settings” -> “Fixed Links”, dan klik “Save Changes”. Tindakan ini akan memperbaharui peraturan penulisan semula (rewrite rules) WordPress, sehingga peraturan URL halaman arkib yang baru berkuat kuasa.
2. Pengesahan Pendaftaran CPT: Pastikan bahawa kod yang digunakan untuk mendaftar CPT sedang berjalan (diproses), dan… has_archive Parameter tersebut akhirnya diserahkan kepada… register_post_type Waktu memang benar-benar begitu. trueSemak sama ada terdapat plugin atau kod tema lain yang telah menutupi tetapan CPT (Custom Post Type) anda.
3. Semak lokasi dan nama fail: Pastikan. archive-{post_type}.php Fail tersebut terletak di dalam direktori akar (root directory) bagi topik yang betul. Semak ejaan nama fail, termasuk huruf besar dan kecil, untuk memastikan ia sama sepenuhnya dengan nama jenis pos (post_type) yang telah didaftarkan.
4. Menguruskan penggantian tema: Jika anda menggunakan subtema, pastikan bahawa tema induk tidak mempunyai fail templat dengan nama yang sama yang akan menggantikan struktur templat subtema tersebut. Selain itu, periksa juga sama ada terdapat masalah lain yang berkaitan dengan penggunaan subtema. template_include Masalah gangguan pada penapis.
5. Masalah cache: Kosongkan semua jenis cache, termasuk cache objek WordPress, cache plugin halaman, serta cache pelayan atau CDN.

Mengenai amalan terbaik, disyorkan untuk sentiasa menggunakannya. pre_get_posts bukan sebaliknya query_posts Mari kita ubah pertanyaan tersebut; gunakannya dalam fail templat. post_class() 为文章输出动态的CSS类,以方便样式设计;并为你的自定义模板文件添加清晰的头部注释。

RINGKASAN

Menghubungkan templat arkib khusus untuk pelbagai jenis artikel di WordPress adalah proses yang memastikan kandungan dapat disampaikan dengan tepat dan sesuai dengan reka bentuk yang diinginkan. Intipati utamanya terletak pada pemahaman dan penggunaan mekanisme yang tersedia dalam sistem WordPress untuk mengatur penampilan arkib tersebut. archive-{post_type}.php Peraturan hierarki templat ini melibatkan beberapa aspek penting, bermula dari memastikan bahawa fungsi penyimpanan (archiving) diaktifkan semasa pendaftaran CPT (Common Practice Template), hingga proses penciptaan dan penamaan fail templat yang betul, dan seterusnya penggunaannya. pre_get_posts Kepintaran penggunaan “hook” dalam kawalan pertanyaan yang lebih canggih sangat penting, di mana setiap langkah memainkan peranan yang kritikal. Setelah menguasai kemahiran-kemahiran ini, anda akan dapat dengan mudah membuat halaman senarai yang lengkap dengan fungsi dan reka bentuk yang unik untuk setiap jenis kandungan pada laman web, sehingga meningkatkan kredibiliti dan pengalaman pengguna laman web tersebut dengan ketara.

FAQ - Soalan Lazim

Apa rupa URL untuk halaman arkib yang disesuaikan?

Secara lalunya, WordPress akan menjana URL halaman arkib berdasarkan nama yang anda gunakan semasa mendaftar jenis artikel khusus (custom article types). Sebagai contoh, untuk sebuah jenis artikel yang dinamakan “Blog Post”, URL halaman arkibnya akan terbentuk seperti ini: product URL untuk halaman arkib CPT biasanya adalah… 你的网站域名/product/Anda boleh mengaturnya semasa proses pendaftaran. rewrite Dalam parameter tersebut… slug Pilihan ini membenarkan anda menyesuaikan nama alias (alias) untuk URL tersebut.

Bolehkah saya menunjukkan penapisan artikel berdasarkan klasifikasi tersuai dalam templat arkib?

Sudah tentu boleh. Ini adalah keperluan yang biasa untuk halaman arkib. Anda boleh… archive-{post_type}.php Terdapat penggunaan templat dalam ini get_terms() Fungsi tersebut mendapatkan semua terma daripada klasifikasi khusus yang berkaitan (seperti “Klasifikasi Produk”), kemudian mengeluarkannya dalam bentuk pautan yang boleh digunakan untuk penyaringan. Apabila pengguna mengklik salah satu pautan klasifikasi tersebut, mereka akan dibawa ke halaman arkib untuk klasifikasi tersebut, dan pada masa itu WordPress akan mencari dan memuatkan kandungan yang berkaitan. taxonomy-{taxonomy_name}.phptaxonomy-{taxonomy_name}-{term_slug}.php Template seperti ini.

Bagaimana untuk membuat halaman senarai untuk jenis artikel yang tidak mempunyai fungsi arkivan?

Jika untuk jenis artikel tertentu… has_archive Tetapkan kepada falseDalam kes ini, anda tidak akan dapat mengakses senarai tersebut melalui URL arkib standard. Alternatifnya adalah dengan membuat sebuah halaman biasa (Page), dan kemudian menggunakan templat halaman tersebut untuk menampilkan kandungan yang diinginkan. WP_Queryget_posts() Untuk mencari dan menunjukkan artikel jenis tertentu, anda boleh mengatur templat khusus untuk halaman tersebut, dan menulis kod pertanyaan serta kod ulangan (loop) yang sesuai di dalamnya.

Pemagangan halaman (pagination) tidak berfungsi pada halaman arkib yang disesuaikan (customized archive pages). Bagaimana cara untuk memperbaikinya?

Masalah dengan fungsi penggulungan halaman (pagination) hampir selalu disebabkan oleh pengubahsuaian yang tidak betul pada Kueri Utama (Main Query). Pastikan anda tidak menggunakan sebarang kod yang boleh mengubah Kueri Utama dalam templat anda. query_posts()Jika anda perlu mengubah parameter pertanyaan (seperti bilangan artikel, kaedah pengurutan), anda mesti menggunakan… pre_get_posts Hook, seperti yang dinyatakan dalam artikel ini. Pada masa yang sama, pastikan untuk memanggilnya dengan betul. the_posts_pagination() Semasa menggunakan fungsi pembahagian halaman, ia berfungsi pada skala global (merangkumi keseluruhan sistem atau aplikasi). $wp_query Objek, bukan sesuatu yang dibuat khas (customized). WP_Query Contoh.