Comment associer des modèles d’archives personnalisés à différents types d’articles WordPress

Lecture en 3 minutes
2026-03-18
2026-06-04
2,031
Je reçois une commission lorsque vous achetez via les liens ci‑dessous, sans frais supplémentaires pour vous.

La structure hiérarchique des templates thèmes WordPress est au cœur de leur puissance et de leur flexibilité. Elle permet aux développeurs de créer des pages d'affichage uniques pour différents types de contenu en suivant des règles de nommage des fichiers spécifiques. Ce mécanisme est tout aussi clair et efficace pour les pages d'archive (c'est-à-dire les pages listant les articles). Il est essentiel de bien comprendre et d'appliquer correctement ces règles. archive-{post_type}.php Cette règle de nommage est essentielle pour créer des pages de liste dédiées aux types d’articles personnalisés. Cet article expliquera de manière systématique le processus complet, allant des principes fondamentaux à la mise en pratique, en passant par la résolution des problèmes qui pourraient survenir.

Comprendre les niveaux des modèles et le mécanisme des pages d'archivage

Lorsque les utilisateurs consultent une page listant des articles, par exemple la page d’accueil de votre blog ou une page de catégorie, WordPress lance un processus appelé “ requête principale ” afin de récupérer les articles correspondants. En même temps, il recherche le fichier de template PHP le plus adapté en fonction du contexte de la requête actuelle, en suivant un ordre de priorité établi. Cet ordre est défini par la “ hiérarchie des templates ”.

Pour la page d’archivage, le chemin de recherche suit un modèle bien défini. Supposons qu’un utilisateur accède à la page d’archivage du type “ Article ” par défaut ; WordPress recherche alors successivement :archive-post.php -> archive.php -> index.phpDès que le premier fichier existant est trouvé, il sera utilisé.

Lectures recommandées Maîtriser les types d’articles personnalisés de WordPress : un guide pratique complet, de la création à la publication.

L’essence de ce mécanisme réside dans… archive-{post_type}.php…Ici… {post_type} Il s’agit d’une variable qui doit être remplacée par le nom de type d’article enregistré. Par exemple, pour créer une page d’archive pour un type d’article personnalisé appelé “ Projet ”, il vous faut un nom spécifique pour ce type d’article. archive-project.php Le fichier en question. Si ce fichier n’existe pas, WordPress reviendra à la configuration par défaut. archive.phpCela nous permet de contrôler avec précision la manière dont les listes de différents types de contenu sont affichées.

Hébergement WordPress par UltraHost
Garantie de remboursement dans les 30 jours, bande passante illimitée et base de données, protection gratuite contre les attaques DDoS. Avantage de 501 TP4T pour les achats sur 3 ans.

Créer un modèle d'archive pour les types d'articles personnalisés

Vérifiez que le type d’article prevoie la fonction d’archivage.

La condition préalable à la création d'un fichier de modèle est que votre type d'article personnalisé (CPT – Custom Post Type) doit explicitement indiquer son support pour l’archivage. Cela se fait généralement lors de la définition du type d'article dans le fichier de configuration du thème (thème template file). register_post_type L’enregistrement de la fonction CPT se fait via la définition des paramètres.

Dans l'arrêté de paramètres de la fonction d'enregistrement,has_archive Ce paramètre contrôle l’activation de la page d’archivage. Définissez-le comme suit : true C’est une étape essentielle. Si elle est configurée de la sorte… false Ou non configuré (par défaut) falseMême si vous créez le fichier de modèle correct, WordPress ne générera pas l’URL correspondant pour accéder à cette page d’archive.

Un exemple type de registration CPT (Common Practice Template) prenant en charge l'archivage est le suivant :

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

Construire la structure et le contenu d'un fichier de modèle

Après avoir confirmé que CPT prend en charge l’archivage, la prochaine étape consiste à créer le fichier de modèle correspondant dans le répertoire thématique de votre activité. La nomination du fichier doit respecter strictement les conventions établies. archive-{post_type}.php Le format doit être respecté, et… {post_type} Le nom doit être strictement identique à celui utilisé lors de l’enregistrement (prise en compte de la casse).

Lectures recommandées Débuter de zéro : Guide complet sur le développement de thèmes WordPress et partage des meilleures pratiques

À l’intérieur de ce fichier, vous pouvez utiliser les balises de template et les boucles de WordPress pour construire ce template, tout comme vous le feriez pour d’autres pages. Il s’agit d’une version de base et complète du template en question. archive-product.php Cela pourrait ressembler à ceci :

<?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="/fr/</?php the_permalink(); ?>" class="product-thumbnail-link">
                        
                    </a>
                    <div class="product-content">
                        <h2 class="product-title">
                            <a href="/fr/</?php the_permalink(); ?>"></a>
                        </h2>
                        <div class="product-excerpt">
                            
                        </div>
                        <a href="/fr/</?php the_permalink(); ?>" class="read-more-link">Introduction</a>
                    </div>
                </article>
            
        </div>

2,
            'prev_text' =&gt; __( '上一页', 'textdomain' ),
            'next_text' =&gt; __( '下一页', 'textdomain' ),
        ) );
        ?&gt;
        <section class="no-products">
            <p>Désolé, aucun produit n’a été trouvé pour l’instant.</p>
        </section>
    
</main>

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

Avancées en contrôle et astuces de personnalisation

Utiliser des conditions dans les modèles d'archivage généraux

Parfois, vous pourriez souhaiter que plusieurs types d’articles différents partagent le même… archive.php Les fichiers contiennent des données, mais ces données sont affichées de manière différente en fonction de leur type. C’est à ce moment-là que les balises conditionnelles (Conditional Tags) de WordPress deviennent très utiles.

Les conditions les plus pertinentes sont : is_post_type_archive() Fonction. Vous pouvez… archive.php Il peut être utilisé pour personnaliser les titres, les descriptions ou les structures de boucle pour différents CPT (Codes de Produits Thématiques).

hosting.com Hébergement partagé
Hautes performances avec les CPU AMD EPYC, stockage SSD NVMe et LiteSpeed, support interne expert 24h/24 et 7j/7, mesures de sécurité avancées, notamment SSL, protection contre la force brute, les logiciels malveillants et le DDoS, économies pouvant aller jusqu'à 73%.
// 在 archive.php 文件内
if ( is_post_type_archive('product') ) {
    echo '<h1>Nos produits et solutions</h1>';
    get_template_part('template-parts/loop', 'product-grid');
} elseif ( is_post_type_archive('event') ) {
    echo '<h1>Événements et séminaires récents</h1>';
    get_template_part('template-parts/loop', 'event-list');
} else {
    // 默认的文章存档(博客)
    echo '<h1>Blogues et informations</h1>';
    get_template_part('template-parts/loop', 'default');
}

Utiliser des « hooks » pour modifier les requêtes affichant les pages d’archivage.

Modifier directement les boucles contenues dans les fichiers de template ne permet de changer que l’aspect visuel de l’affichage des données. Si vous souhaitez modifier la logique utilisée pour récupérer les articles sur la page d’archive – par exemple, ajuster le nombre d’articles par page, le mode de tri ou filtrer certains articles – vous devez utiliser des méthodes appropriées dans le code qui gère l’affichage des données. pre_get_posts Hook d’action. C’est la méthode recommandée par WordPress, car elle permet une bonne collaboration avec des fonctionnalités telles que la pagination.

L'exemple de code suivant montre comment modifier la requête principale pour la page d'archivage des “ produits ”, afin qu'elle soit triée selon un champ personnalisé et affiche 9 éléments par page :

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

Mémo important : Il est absolument interdit d’utiliser des éléments dans les fichiers de template. query_posts() Modifier la requête principale peut endommager l’objet de la requête et provoquer des erreurs de pagination, des problèmes de compatibilité avec les plugins, etc.

Lectures recommandées Guide complet pour le développement de sites e-commerce avec WooCommerce : de la mise en place à la réalisation de fonctionnalités avancées

chargement dynamique de différents fichiers de modèle

Pour des scénarios plus complexes, vous pouvez utiliser… template_include Des filtres sont utilisés pour déterminer dynamiquement quel fichier de template doit être chargé. Cela vous permet de changer de template en fonction de n’importe quel critère (comme le rôle de l’utilisateur, les paramètres de l’URL, l’heure, etc.).

Par exemple, la page d'archivage des “ produits ” charge un modèle différent sous certaines conditions :

Hébergement partagé InterServer
Hébergement mutualisé $2.50 USD par mois, premier mois $0.1 USD code promo tryinterserver, 461 scripts cloud apps, installation en un clic.
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');

Dépannage et bonnes pratiques

Même si toutes les étapes ont été suivies, il se peut que le modèle d’archivage ne fonctionne pas. Voici une liste de vérifications systématiques à effectuer :

1. Rafraîchir les liens permanents : C’est l’étape la plus courante et la plus importante. Accédez à l’administration de WordPress, allez dans “ Paramètres ” → “ Liens permanents ”, puis cliquez simplement sur “ Enregistrer les modifications ”. Cette action rafraîchira les règles de réécriture de WordPress, permettant ainsi aux nouvelles règles de gestion des URL des pages d’archive de prendre effet.
2. Vérification de l’enregistrement du CPT : Assurez-vous que le code utilisé pour l’enregistrement du CPT est bien exécuté, et que… has_archive Les paramètres sont finalement transmis à… register_post_type En effet, le temps passe vraiment… trueVérifiez si d’autres plugins ou des codes de thème n’ont pas modifié vos paramètres CPT (Custom Post Type).
3. Vérifier l'emplacement et le nom des fichiers : Confirmer archive-{post_type}.php Le fichier se trouve dans le répertoire racine du thème approprié. Vérifiez l’orthographe du nom du fichier, y compris la casse, et assurez-vous qu’il correspond exactement au nom du type de poste (post_type) enregistré.
4. Gestion de la surcouverture des thèmes : Si vous utilisez des sous-thèmes, assurez-vous que le thème parent ne contienne pas de fichier de template du même nom qui pourrait surcouvrir la structure des templates du sous-thème. Vérifiez également s’il n’existe pas d’autres problèmes similaires. template_include Interférence des filtres.
5. Problèmes de cache : Vider le cache à tous les niveaux, y compris le cache des objets WordPress, le cache des pages générées par des plugins, ainsi que le cache du serveur ou du CDN.

En ce qui concerne les bonnes pratiques, il est recommandé d’utiliser systématiquement… pre_get_posts plutôt que query_posts Modifiez la requête et utilisez-la dans le fichier de template. post_class() Pour faciliter la conception des styles, générer des classes CSS dynamiques pour l’article ; et ajouter des commentaires clairs en tête de votre fichier de modèle personnalisé.

résumés

Associer des modèles d’archivage personnalisés aux différents types d’articles sur WordPress consiste à mettre en correspondance de manière précise le contenu avec son affichage. L’essentiel réside dans la compréhension et l’utilisation des mécanismes permettant de réaliser cela. archive-{post_type}.php Ces règles de hiérarchie des modèles assurent, entre autres, que la fonction d’archivage soit activée lors de l’enregistrement d’un CPT (Component Profile Template), que les fichiers de modèle soient créés et nommés correctement, et qu’ils soient utilisés de manière appropriée. pre_get_posts Les hooks permettent de contrôler les requêtes avancées, et chaque étape de ce processus est cruciale. Une fois que vous maîtriserez ces compétences, vous pourrez facilement créer des pages de listes fonctionnelles et au style unique pour chaque type de contenu sur votre site, ce qui améliorera considérablement le professionnalisme de votre site ainsi que l’expérience utilisateur.

FAQ Foire aux questions

À quoi ressemble l’URL de la page d’archivage personnalisée ?

Par défaut, WordPress génère l’URL des pages d’archivage en fonction du nom que vous avez utilisé pour enregistrer votre type d’article personnalisé. Par exemple, un type d’article nommé… product Pour le CPT (Code de Procédure Thérapeutique), l’URL de sa page d’archivage est généralement… 你的网站域名/product/Vous pouvez le faire en configurant vos paramètres lors de l’enregistrement. rewrite Dans les paramètres… slug Les options permettent de personnaliser cet alias de URL.

Puis-je afficher dans le modèle d'archivage le filtre d'articles basé sur la classification personnalisée ?

Bien sûr. C’est une demande courante pour les pages d’archivage. Vous pouvez… archive-{post_type}.php Utilisé dans un modèle. get_terms() La fonction récupère tous les termes de la classification personnalisée associée (par exemple, “ Classification des produits ”), puis les affiche sous forme de liens de filtrage. Lorsque l'utilisateur clique sur l’un de ces liens, il est redirigé vers la page d’archive de cette classification. À ce moment-là, WordPress recherche et charge les contenus correspondants. taxonomy-{taxonomy_name}.php Ou taxonomy-{taxonomy_name}-{term_slug}.php Modèles d'attente, etc.

Comment créer une page de liste pour des types d’articles pour lesquels la fonction d’archivage n’est pas activée ?

Si un type d’article particulier… has_archive Set to falseDans ce cas, vous ne pourrez pas accéder à sa liste via une URL d'archivage standard. La solution de remplacement consiste à créer une page ordinaire et à utiliser ce modèle de page pour afficher les informations souhaitées. WP_Query Ou get_posts() Veuillez effectuer une recherche pour afficher les articles de ce type spécifique. Vous pouvez attribuer un modèle personnalisé à cette page et y inclure du code de recherche ainsi que des boucles dédiées.

La fonction de pagination ne fonctionne pas sur les pages d'archivage personnalisées. Comment puis-je corriger cela ?

L’échec de la pagination est presque toujours dû à une modification incorrecte de la requête principale (Main Query). Vérifiez que vous n’avez pas utilisé de modifications inappropriées dans vos templates. query_posts()Si vous devez modifier les paramètres de la requête (comme le nombre d’articles ou le mode de tri), vous devez utiliser… pre_get_posts Les crochets, tels que décrits dans cet article. Assurez-vous également de les utiliser correctement lors de l’appel… the_posts_pagination() Lors de la fonction de pagination équilibrée, l’action s’applique à l’échelle globale (c’est-à-dire à l’ensemble des données). $wp_query Un objet, et non une définition personnalisée. WP_Query Exemple.