Hoe kun je voor verschillende soorten WordPress-artikelen een aangepaste archiveringstemplate gebruiken?

3 minuten leestijd
2026-03-18
2026-06-04
2,001
Ik verdien commissies wanneer je via de onderstaande links winkelt, zonder dat dit extra kosten voor jou met zich meebrengt.

De hiërarchie van themaplagen in WordPress vormt de kern van de kracht en flexibiliteit van het systeem. Ontwikkelaars kunnen dankzij specifieke regels voor de benaming van bestanden unieke weergavepagina’s voor verschillende soorten content creeren. Dit principe is eveneens duidelijk en effectief voor archiveringspagina’s (pagina’s met een lijst van artikelen). Het is belangrijk om dit te begrijpen en correct te toepassen. archive-{post_type}.php Deze benoemingsregels zijn essentieel voor het creeren van speciale lijstpagina's voor aangepaste artikeltypes. In dit artikel wordt het gehele proces systematisch uitgelegd: van de principes tot de praktische toepassing, en van daaruit ook de manieren om problemen op te sporen en te verhelpen.

Het begrijpen van de structuur van templates en het werksmechanisme van archiveringspagina's

Als een gebruiker een pagina met een lijst van artikelen bezoekt, bijvoorbeeld de homepage van je blog of een pagina met een bepaalde categorie, start WordPress een proces genaamd “main query” om de corresponderende artikelen te halen. Tevens wordt, afhankelijk van de context van de huidige query, een PHP-templaatbestand met de hoogste prioriteit gevonden om de pagina te weergeven. Deze volgorde van prioriteiten wordt bepaald door de zogeheten “template hierarchy” (templaathiërarchie).

Voor de archiveringspagina heeft de zoekroute een duidelijk patroon. Als de gebruiker de standaardarchiveringspagina van het type “Artikel” bezoekt, zal WordPress op de volgende manier zoeken:archive-post.php -> archive.php -> index.phpZodra het eerste bestaande bestand wordt gevonden, wordt dat gebruikt.

Aanbevolen leesmateriaal WordPress: Een volledig praktisch handboek over het maken en publiceren van aangepaste artikeltypes

De kern van dit mechanisme ligt in... archive-{post_type}.phpHier {post_type} Dit is een variabele die moet worden vervangen door de registratie-naam van de artikeltype. Als je bijvoorbeeld een archiveringspagina wilt maken voor een aangepaste artikeltype met de naam “Project”, moet je dus een naam hebben voor deze artikeltype. archive-project.php Als deze bestand niet bestaat, zal WordPress terugvallen op de standaardinstellingen. archive.phpDit biedt ons de mogelijkheid om precies te bepalen hoe verschillende soorten inhoud worden weergegeven in een lijst.

UltaHost WordPress-hosting
30-daagse garantie voor het terugbetalen van het geld, onbeperkt bandbreedte- en databestand, gratis DDoS-beveiliging, en een prijsvoordeel van 50% bij een aankoop van 3 jaar.

Een archiveringstemplate voor een aangepaste artikeltype maken

Zorg ervoor dat de artikeltype ondersteuning biedt voor het archiveren.

De voorwaarde voor het maken van een template-bestand is dat je aangepaste artikeltype (CPT, Custom Post Type) duidelijk aangeeft dat het archivering ondersteunt. Dit gebeurt meestal wanneer... register_post_type De registratie van een functie als CPT (Custom Product Type) wordt gedaan door deze instellingen te specificeren via parameters.

In het array van parameters van de registratiefunctiehas_archive De parameter bepaalt of de archiveringspagina wordt gebruikt. Zet deze op… true Dit is een essentieel stap. Als het zo is ingesteld... false Of niet ingesteld (de standaardwaarde is...) falseZelfs als je de juiste templatebestand hebt gemaakt, genereert WordPress geen corresponderende URL waarmee je deze archiveringspagina kunt bereiken.

Een voorbeeld van een standaard CPT-registratie met ondersteuning voor archivering is als volgt:

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');

Het opbouwen van de structuur en inhoud van een template-bestand

Nadat je hebt bevestigd dat CPT archivering ondersteunt, is de volgende stap om een corresponderend templatebestand te maken in het mapverhaal van je evenement. De naming van het bestand moet strikt worden gevolgd… archive-{post_type}.php In de gewenste format, en {post_type} Het moet exact overeenkomen met de naam die is gebruikt tijdens het registreren (met behoud van hoofd- en kleine letters).

Aanbevolen leesmateriaal Van nul beginnen: Een volledig handboek voor het ontwikkelen van WordPress-themes en tips voor de beste praktijken

Binnen deze bestand kun je, net zoals je andere paginaontwerpen maakt, gebruikmaken van de template-taggen en cycli van WordPress. Dit is een basisversie van een volledig ontwerp. archive-product.php Het kan er als volgt uitzien:

<?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="/nl/</?php the_permalink(); ?>" class="product-thumbnail-link">
                        
                    </a>
                    <div class="product-content">
                        <h2 class="product-title">
                            <a href="/nl/</?php the_permalink(); ?>"><p><strong>Hallo wereld!</strong></p></a>
                        </h2>
                        <div class="product-excerpt">
                            <p><strong>Het volledige artikel is hier te lezen.</strong></p>
                        </div>
                        <a href="/nl/</?php the_permalink(); ?>" class="read-more-link">Details bekijken</a>
                    </div>
                </article>
            <?php endwhile; ?>
        </div>

2,
            'prev_text' =&gt; __( '上一页', 'textdomain' ),
            'next_text' =&gt; __( '下一页', 'textdomain' ),
        ) );
        ?&gt;
        <section class="no-products">
            <p>Het spijt ons, maar op dit moment worden geen producten gevonden.</p>
        </section>
    <?php endif; ?>
</main>

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

Advanced control and customization techniques

Het gebruik van conditionele beoordelingen in een algemeen archiveringspatroon

Soms wil je dat meerdere verschillende soorten artikelen dezelfde inhoud of structuur delen. archive.php De bestanden worden weergegeven, maar er wordt afhankelijk van de type verschillend content getoond. Hier komen de conditionele tags (Conditional Tags) van WordPress heel handig van pas.

De meest relevante voorwaarden zijn… is_post_type_archive() Function. Je kunt... archive.php Je kunt het gebruiken om voor verschillende CPTs (Custom Product Types) titels, beschrijvingen of cyclische structuren aan te passen.

hosting.com gedeelde hosting
Hoge prestaties met AMD EPYC CPU's, NVMe SSD opslag en LiteSpeed, 24/7 deskundige interne ondersteuning, geavanceerde beveiligingsmaatregelen waaronder SSL, bescherming tegen brute kracht, malware en DDoS, besparingen tot 73%
// 在 archive.php 文件内
if ( is_post_type_archive('product') ) {
    echo '<h1>Onze producten en oplossingen</h1>';
    get_template_part('template-parts/loop', 'product-grid');
} elseif ( is_post_type_archive('event') ) {
    echo '<h1>Recente evenementen en seminars</h1>';
    get_template_part('template-parts/loop', 'event-list');
} else {
    // 默认的文章存档(博客)
    echo '<h1>Blogs en nieuws</h1>';
    get_template_part('template-parts/loop', 'default');
}

Het gebruik van hooks om de zoekresultaten op de archiveringspagina te bewerken

Als je de cyclische structuren in de templatebestanden rechtstreeks wijzelt, verander je alleen het uiterlijk van de weergave. Als je de logica achter het verkrijgen van artikelen op de archiveringspagina wilt veranderen – bijvoorbeeld het aantal artikelen per pagina, de sortering of het filteren van bepaalde artikelen – moet je andere methoden gebruiken. pre_get_posts Action hooks: Dit is de door WordPress aanbevolen manier om ervoor te zorgen dat functies zoals paginering goed samenwerken.

Het volgende voorbeeldcode toont hoe de hoofdquery op de archiveringspagina voor “producten” kan worden gewijzigd, zodat de resultaten worden gesorteerd op een zelfgeselecteerd veld en dat er per pagina 9 producten worden weergegeven:

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');

Wichtige tip: Vergeet absoluut niet om in de templatebestanden geen code of elementen te gebruiken. query_posts() Als je de hoofdquery gaat bewerken, kan dit het query-object beschadigen, waardoor er fouten optreden bij het pagineren en problemen met de compatibiliteit van plugins kunnen ontstaan.

Aanbevolen leesmateriaal Alles over het ontwikkelen van een WooCommerce-winkelwebsite: van het opzetten tot het realiseren van geavanceerde functies

Dynamisch laden van verschillende templatebestanden

Voor complexere scenario's kun je gebruikmaken van... template_include Er zijn filters die dynamisch bepalen welke templatebestand wordt geladen. Dit maakt het mogelijk om tussen verschillende templates te switchen op basis van willekeurige criteria, zoals de rol van de gebruiker, URL-parameeters of de tijd.

Als bijvoorbeeld de archiveringspagina voor “producten” onder bepaalde omstandigheden een andere template moet laden:

InterServer gedeelde hosting
Shared hosting $2.50 USD per maand, eerste maand $0.1 USD promo code tryinterserver, 461 cloud apps scripts, een klik te installeren.
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');

Foutopsporing en beste praktijken

Hoewel alle stappen zijn gevolgd, werkt de archiveringstemplate soms niet. Hier is een systematische lijst met mogelijke oorzaken en manieren om dit probleem op te lossen:

1. Opnieuw instellen van de permanente links: Dit is de meest voorkomende en belangrijkste stap. Ga naar het WordPress-beheerpaneel, klik op “Instellingen” → “Permanente links” en klik vervolgens op “Wijzigingen opslaan”. Hierdoor worden de regels voor het herschrijven van URLs in WordPress bijgewerkt, zodat de nieuwe URL’s voor de archiefpagina’s geldig worden.
2. Verificatie van de CPT-registratie: Zorg ervoor dat de code voor de registratie van de CPT wordt uitgevoerd, en dat… has_archive De parameters worden uiteindelijk overgedragen aan… register_post_type Ja, dat klopt inderdaad. trueKijk of er andere plugins of thema-codes zijn die je CPT-instellingen hebben overschreven.
3. Kontroleren van de locatie en benaming van de bestanden: bevestigen archive-{post_type}.php De bestand bevindt zich in de rootmap van het juiste thema. Controleer de spelling van de bestandsnaam (inclusief hoofd- en kleine letters) en of deze exact overeenkomt met de naam van de geregistreerde post_type.
4. Verwerking van thema-overlapping: Als je gebruikmaakt van subthema's, moet je ervoor zorgen dat het parentema geen template-bestand met dezelfde naam heeft dat de template-hiërarchie van het subthema overschrijft. Controleer ook of er geen andere problemen zijn. template_include Filterproblemen.
5. Caching-problemen: Verwijder alle niveaus van caching, inclusief de WordPress-objectcache, de pagina-caching-plugin en de caching op de server of bij een CDN (Content Delivery Network).

Met betrekking tot de beste praktijken wordt het aanbevolen om altijd de juiste methoden te gebruiken. pre_get_posts in plaats van query_posts Om de query te wijzigen, moet je deze gebruiken in het templatebestand. post_class() Voor het artikel dynamische CSS-klassen genereren om het gemakkelijk te kunnen stijlen; voeg ook duidelijke hoofdcommentaren toe aan je eigen template-bestanden.

Samenvatting

Het koppelen van aangepaste archiverings templates aan verschillende artikeltypes in WordPress is een proces waarbij de inhoud en de weergave van de artikelen precies op elkaar worden afgestemd. Het belangrijkste hierbij is om de verschillende aspecten goed te begrijpen en te kunnen toepassen. archive-{post_type}.php Deze regels voor het gebruik van templates zijn bedoeld om ervoor te zorgen dat de archiveringsfunctie wordt ingeschakeld tijdens de registratie van een CPT (Claim Preparation Tool), dat de templatebestanden correct worden gecreëerd en genoemd, en dat ze op de juiste manier worden gebruikt. pre_get_posts De ‘hooks’ bieden controle over de uitvoering van geavanceerde queries, en elke stap hierin is van cruciaal belang. Nadat je deze technieken onder de knie hebt, kun je gemakkelijk voor elke soort content op de website functionele en unieke lijstpagina’s maken. Dit zorgt voor een grotere professionaliteit van de website en een betere gebruikerservaring.

Veelgestelde vragen (FAQ)

Welk is het format van de URL voor de aangepaste archiveringspagina?

Op basis van de standaardinstellingen genereert WordPress de URL's voor de archiveringspagina's op basis van de namen die je gebruikt toen je de aangepaste artikeltypes registreerde. Bijvoorbeeld, een artikeltype met de naam... product De URL van de archiveringspagina voor de CPT (Claimed Payment Transaction) is meestal… 你的网站域名/product/Je kunt dit instellen tijdens het registreren. rewrite In de parameter… slug De opties bieden de mogelijkheid om deze URL-naam te personaliseren.

Kan ik in het archiveringspatroon een filter voor artikelen gebruiken die zijn ingedeeld in een aangepaste categorie?

Natuurlijk kan dat. Dit is een veel voorkomend verzoek voor archiveringspagina's. Je kunt... archive-{post_type}.php Gebruikt in een template get_terms() 函数获取关联的自定义分类法(如“产品分类”)的所有术语,然后循环输出为筛选链接。当用户点击某个分类链接时,他们会进入该分类法的归档页面,此时WordPress会寻找并加载 taxonomy-{taxonomy_name}.phptaxonomy-{taxonomy_name}-{term_slug}.php En andere templates.

Hoe maak je een lijstpagina voor artikelen van een bepaald type wanneer de archiveringsfunctie niet is ingeschakeld?

Als het om een bepaalde soort artikel gaat… has_archive Instellen als falseAls je de standaardarchieven niet kunt bereiken via een archievenURL, kun je een gewone pagina maken en deze pagina vervolgens gebruiken in het template van de gewenste archievenpagina. WP_Queryget_posts() Om artikelen van een specifieke type op te vragen en te weergeven, kun je een aangepaste template toewijzen aan deze pagina en daarin speciale query- en loopcodes schrijven.

Paginering werkt niet op de aangepaste archiveringspagina’s. Hoe kan dit worden gerepareerd?

Paginatie werkt niet meer wanneer de hoofdquery (Main Query) op de verkeerde manier is gewijzigd. Zorg ervoor dat je de hoofdquery niet hebt veranderd in je templates. query_posts()Als je de zoekparameters wilt wijzigen (bijvoorbeeld het aantal artikelen of de sortering), moet je dit gebruiken. pre_get_posts De ‘hook’-functies, zoals beschreven in dit artikel. Zorg ervoor dat deze ook worden gebruikt wanneer ze worden opgeroepen. the_posts_pagination() Tijdens het delen van pagina's wordt dit op een globale manier gedaan. $wp_query Een object, in plaats van een zelfgemaakte (custom) variant. WP_Query Een voorbeeld: