Jak propojit přizpůsobené archivační šablony s různými typy článků v WordPressu?

Čtení za 3 minuty.
2026-03-18
2026-06-04
2,006
Získávám provize, když nakupujete prostřednictvím níže uvedených odkazů, aniž by vás to něco stálo navíc.

Hierarchie šablon temát WordPressu je jádrem jejich silné a flexibilní funkčnosti – umožňuje vývojářům vytvářet jedinečné webové stránky pro různé typy obsahu pomocí konkrétních pravidel pojmenovávání souborů. Tento princip platí stejně i pro stránky s archivy (tj. stránky obsahující seznam článků). Je důležité tento princip pochopit a správně aplikovat. archive-{post_type}.php Toto pravidlo pojmenovávání je klíčové pro vytvoření speciálních stránek seznamů pro vlastní typy článků. Tento článek systematicky vysvětlí celý proces – od principů přes praktické aplikace až po řešení případných problémů.

Porozumění struktuře šablon a mechanismu archivace stránek

Když uživatel navštíví stránku se seznamem článků – například domovskou stránku vašeho blogu nebo stránku s určitou kategorií – spustí WordPress proces zvaný “hlavní dotaz” (“main query”), který slouží k získání příslušných článků. Zároveň vyhledá podle kontextu aktuálního dotazu nejvhodnější soubor PHP šablony pro zobrazení stránky, a to podle určitého pořadí priorit. Toto pořadí je známé jako „hlavní struktura šablon“ („template hierarchy“).

Pro stránky archivů existuje jasný vzorec určující jejich umístění. Předpokládejme, že uživatel navštíví stránku archivu typu “Články” (což je výchozí typ archivu). WordPress poté bude hledat pořadí následujícím způsobem:archive-post.php -> archive.php -> index.phpBude použit první nalezený soubor.

Doporučujeme k přečtení. Ovládněte vlastní typy článků v WordPressu: kompletní praktický návod od vytvoření po publikování.

Jádrem tohoto mechanismu je… archive-{post_type}.phpZde… {post_type} Jedná se o proměnnou, kterou je třeba nahradit registračním názvem typu článku. Například pokud chcete vytvořit stránku s archivem pro vlastní typ článku s názvem “Projekt”, budete potřebovat název tohoto typu článku. archive-project.php Pokud tento soubor neexistuje, WordPress se přepne na standardní (běžnou) verzi. archive.phpTo nám umožňuje přesně ovládat způsob zobrazení seznamů různých typů obsahu.

UltaHost – hosting služby pro weby postavené na platformě WordPress
Záruka vrácení peněz do 30 dnů, neomezený šířka pásma a databáze, bezplatná ochrana proti DDoS útokům. Sleva 501 TP4T při nákupu na 3 roky.

Vytvořte šablonu archivu pro vlastní typy článků.

Ujistěte se, že typ článku podporuje funkci archivace.

Předpokladem pro vytvoření šablonového souboru je, že váš vlastní typ článku (CPT – Custom Post Type) musí jasně uvádět podporu archivace. To se obvykle udává při registraci tohoto typu článku v systému. register_post_type Při registraci funkce pro CPT (Content Provider Testing) se to provádí pomocí nastavení parametrů.

V parametrickém arranží funkce registracehas_archive Parametr řídí, zda má být stránka s archivy povolena. Nastavte ho na… true Je to nezbytný krok. Pokud je nastaveno… false Nebo není nastaveno (výchozí hodnota je…) falseI když vytvoříte správný šablonový soubor, WordPress nevygeneruje odpovídající URL pro přístup k této archivní stránce.

Níže je uveden standardní příklad registrace CPT (Common Practice Template) podporující archivaci:

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

Struktura a obsah souboru šablony

Po potvrzení, že CPT podporuje archivaci, je dalším krokem vytvoření odpovídajícího šablonového souboru v adresáři určeném k uložení tematických materiálů vaší akce. Název souboru musí být vytvořen v souladu s přísnými pravidly. archive-{post_type}.php V tomto formátu… a navíc… {post_type} Musí být úplně totožné s jménem použitým při registraci (s ohledem na velikost písmen).

Doporučujeme k přečtení. Od nuly: Kompletní průvodce vývojem WordPress temat a sdílení osvědčených postupů

Uvnitř tohoto souboru můžete používat šablony a cykly WordPress stejným způsobem, jako při vytváření jiných stránkových šablon. Jedná se o základní a kompletní příklad. archive-product.php Možná to vypadá následovně:

<?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="/cs/</?php the_permalink(); ?>" class="product-thumbnail-link">
                        
                    </a>
                    <div class="product-content">
                        <h2 class="product-title">
                            <a href="/cs/</?php the_permalink(); ?>"><p><strong> Řekněte mi něco o sobě.</strong></p></a>
                        </h2>
                        <div class="product-excerpt">
                            <?php the_excerpt(); ?>
                        </div>
                        <a href="/cs/</?php the_permalink(); ?>" class="read-more-link">Zobrazit podrobnosti.</a>
                    </div>
                </article>
            <?php endwhile; ?>
        </div>

2,
            'prev_text' =&gt; __( '上一页', 'textdomain' ),
            'next_text' =&gt; __( '下一页', 'textdomain' ),
        ) );
        ?&gt;
        <section class="no-products">
            <p>Omlouváme se, v tuto chvíli nebyl žádný produkt nalezen.</p>
        </section>
    <?php endif; ?>
</main>

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

Pokročilé techniky řízení a personalizace

Použití podmínek v obecných šablonách archivace

Někdy možná budete chtít, aby více různých typů článků sdílelo stejný… archive.php Soubory, ale uvnitř se zobrazuje různý obsah v závislosti na jejich typu. Právě v takových případech se kondicionální značky (Conditional Tags) v WordPressu ukáží jako velmi užitečné.

Nejrelevantnější podmínky jsou… is_post_type_archive() Funkce. Můžete ji použít… archive.php Můžete jej použít k přizpůsobení nadpisů, popisů nebo cyklických struktur pro různé CPT (Custom Product Types).

Shared hosting na hosting.com
Vysoký výkon, vybavený procesorem AMD EPYC, úložištěm NVMe SSD a LiteSpeedem, nepřetržitá interní podpora odborníků 24 hodin denně a 7 dní v týdnu, pokročilá bezpečnostní opatření včetně SSL, ochrany proti útokům hrubou silou, malwaru a DDoS, úspora až 731 TB/měsíc.
// 在 archive.php 文件内
if ( is_post_type_archive('product') ) {
    echo '<h1>Naše produkty a řešení</h1>';
    get_template_part('template-parts/loop', 'product-grid');
} elseif ( is_post_type_archive('event') ) {
    echo '<h1>Aktivity a semináře v nedávné době</h1>';
    get_template_part('template-parts/loop', 'event-list');
} else {
    // 默认的文章存档(博客)
    echo '<h1>Blogy a zpravodajství</h1>';
    get_template_part('template-parts/loop', 'default');
}

Použití hooků k úpravě dotazů na stránky archivů

Přímá úprava cyklů v souborech šablon může pouze změnit vzhled výstupu. Pokud chcete změnit samotnou logiku získávání článků na stránce archivů – například počet článků na stránce, způsob sortování nebo filtrování určitých článků – musíte použít jiné metody. pre_get_posts Akční háčky (action hooks). Toto je způsob doporučený WordPressem, který zajišťuje správnou spolupráci s funkcemi jako je stránkování (pagination).

Následující příklad kódu ukazuje, jak upravit hlavní dotaz na stránce archivace produktů tak, aby byl seřazen podle vlastního pole a na každé stránce bylo zobrazeno 9 produktů:

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

Důležité upozornění: Rozhodně se vyhněte používání tohoto prvku v souborech šablon. query_posts() Změna hlavního dotazu může narušit strukturu dotazu a vést k chybám při přetáčení stránek, problémům s kompatibilitou doplňků a dalším problémům.

Doporučujeme k přečtení. Kompletní průvodce vývojem e-shopů pomocí platformy WooCommerce: Od vytvoření po implementaci pokročilých funkcí

Dynamické načítání různých šablonových souborů

Pro složitější scénáře můžete použít… template_include Filtr slouží k dynamickému rozhodování o tom, který soubor šablony načíst. To vám umožňuje měnit šablony na základě libovolných podmínek – např. role uživatele, parametrů URL, času atd.

Například stránka s archivem produktů by mohla za určitých podmínek načítat jiný šablonu:

Shared hosting od InterServeru
Sdílený hosting za 1 TB + 5 TB měsíčně za 2,50 USD, slevový kód tryinterserver pro první měsíc za 1 TB + 5 TB za 0,1 USD, a 461 skriptů cloudových aplikací k jednoduché instalaci.
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');

Řešení problémů a osvědčené postupy

I když postupujete všemi kroky správně, někdy archivační šablona možná přesto nebude fungovat. Níže naleznete systematický seznam možných příčin a způsobů řešení problému:

1. 刷新固定链接:这是最常见且首要的步骤。前往WordPress后台的“设置” -> “固定链接”,直接点击“保存更改”。这个操作会刷新WordPress的重写规则,使新的存档页面URL规则生效。
2. 验证CPT注册:确保注册CPT的代码正在执行,并且 has_archive Parametry jsou nakonec předány… register_post_type Čas je skutečně… trueZkontrolujte, zda žádné další pluginy nebo kód temat nenahrazují vaše nastavení CPT (Custom Post Type).
3. 检查文件位置与命名:确认 archive-{post_type}.php Soubor se nachází v kořenovém adresáři správného tématu. Zkontrolujte pravopis názvu souboru, včetně velkých a malých písmen, a ujistěte se, že odpovídá přesně názvu registrovaného typu příspěvku (post_type).
4. 处理主题覆盖:如果你使用的是子主题,确保父主题没有同名模板文件覆盖了子主题的模板层次结构。同时,检查是否有其他 template_include Interference from the filter.
5. 缓存问题:清空所有级别的缓存,包括WordPress对象缓存、页面缓存插件以及服务器或CDN缓存。

Co se týká osvědčených postupů (best practices), doporučuje se vždy používat ty, které jsou široce uznávány a osvědčené v praxi. pre_get_posts místo toho query_posts Přijďte upravit dotaz; použijte ho v souboru šablony. post_class() Pro článek vytvořte dynamické CSS třídy, které usnadní návrh stylů; také přidejte jasné poznámky do hlavičky vašich vlastních šablonových souborů.

Závěr

Připojení vlastních archivních šablon k různým typům článků v WordPressu je procesem, který umožňuje přesně spojit obsah s jejich vzhledem. Klíčovým aspektem je pochopení a správné využití těchto šablon. archive-{post_type}.php Tato pravidla týkají se hierarchie šablon. Začínají u zajištění toho, aby byla funkce archivace aktivována při registraci CPT (Common Procurement Template), pokračují správným vytvářením a pojmenováváním šablonových souborů, a končí jejich použitím. pre_get_posts Kontrola pokročilých dotazů pomocí „hooků“ je velmi důležitá – každý krok v tomto procesu hraje klíčovou roli. Po osvojení těchto dovedností budete moci snadno vytvářet pro každý typ obsahu na webu funkční a originálně vzhledné seznamové stránky, čímž výrazně zvýšíte profesionalitu webu a zlepšíte uživatelský zážitek.

Časté dotazy

Jak vypadá URL stránky pro vlastní archivaci?

Ve výchozím nastavení vytváří WordPress adresy pro archivní stránky na základě názvu, který použijete při registraci vlastního typu článku. Například, článek s názvem… product URL pro archivní stránku CPT je obvykle… 你的网站域名/product/Můžete to nastavit při registraci. rewrite „In the parameters“ slug Možnosti umožňují vlastní definování tohoto přezdívku (aliasu) pro tuto URL adresu.

Můžu zobrazit výběr článků podle vlastní klasifikace v archivním šabloně?

Samozřejmě že můžeme. To je běžná požadavka na stránky určené k ukládání archivů. Můžete… archive-{post_type}.php Použito v šabloně get_terms() Funkce získá všechny termíny spojené s vlastní klasifikací (např. “Kategorie produktů”) a poté je zobrazí v podobě filtrovacích odkazů. Když uživatel klikne na některý z těchto odkazů, přejde na stránku s archivem dané kategorie, kde WordPress najde a načte příslušné informace. taxonomy-{taxonomy_name}.phptaxonomy-{taxonomy_name}-{term_slug}.php Šablony typu „Wait“ (čekání).

Jak vytvořit stránku se seznamem pro typy článků, pro které není aktivována funkce archivace?

Pokud se jedná o určitý typ článku… has_archive Nastavit na falsePokud tak učiníte, nebudete moci na jejich seznam přistupovat pomocí standardních archivačních URL adres. Alternativou je vytvořit obyčejnou stránku (Page) a poté v jejím šabloně použít potřebné funkce. WP_Queryget_posts() Zobrazte články tohoto konkrétního typu. Pro tuto stránku můžete připravit vlastní šablonu a do ní napsat speciální kód pro vyhledávání a zpracování dat.

Stránkování nefunguje na přizpůsobených archivních stránkách – jak to opravit?

Problémy s funkčností stránkování většinou vznikají kvůli chybné úpravě hlavního dotazu (Main Query). Ujistěte se, že v šablonách (templates) nepoužíváte žádné neplatné nebo chybné údaje týkající se tohoto dotazu. query_posts()Pokud potřebujete upravit parametry dotazu (např. počet článků, způsob sortování), musíte použít… pre_get_posts Hooky elements, as described in this article. Make sure to also take into account the requirements when making the calls. the_posts_pagination() Při funkci pro dělení stránek se jedná o globální operaci. $wp_query Objekt, nikoli nějaký vlastní (custom)… WP_Query Příklad.