萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網頁製作 >> 互動設計

WordPress按分類/頁面動態加載不同Header模板:條件標籤實戰指南

WordPress主題開發中,根據分類、頁面、文章類型加載差異化Header是常見需求。本文提供基於條件標籤的三種實現模式,涵蓋分類ID/名稱/別名、頁面標題/別名/ID三大維度,代碼可直接部署於header.php。

核心邏輯:is_category() / is_page() 判斷 → include 對應模板

方案一:按分類ID區分(性能最優)

<?php
if (is_category()) {
    if (is_category('1')) {           // 分類ID=1
        include(TEMPLATEPATH . '/header-cat1.php');
    } elseif (is_category('2')) {     // 分類ID=2
        include(TEMPLATEPATH . '/header-cat2.php');
    } else {
        include(TEMPLATEPATH . '/header-default.php'); // 默認
    }
} else {
    include(TEMPLATEPATH . '/header-default.php');
}
?>

方案二:按分類名稱/別名區分(可讀性更強)

<?php
if (is_category()) {
    if (is_category('Category Name')) {      // 分類名稱
        include(TEMPLATEPATH . '/header-cat1.php');
    } elseif (is_category('category-slug')) { // 分類別名
        include(TEMPLATEPATH . '/header-cat2.php');
    } else {
        include(TEMPLATEPATH . '/header-default.php');
    }
} else {
    include(TEMPLATEPATH . '/header-default.php');
}
?>

方案三:按頁面區分(支援標題/別名/ID)

<?php
// 頁面標題
if (is_page('About')) {
    include(TEMPLATEPATH . '/header-contact.php');
// 頁面別名
} elseif (is_page('subscribe')) {
    include(TEMPLATEPATH . '/header-subscribe.php');
// 頁面ID
} elseif (is_page('6')) {
    include(TEMPLATEPATH . '/header-contact.php');
} else {
    include(TEMPLATEPATH . '/header-default.php');
}
?>

進階架構建議

  1. 模板分層:header-default.php作基礎,差異部分抽離為header-{type}.php,避免代碼重複;
  2. 使用get_header($name) API:WP原生函數自動查找header-{$name}.php,更規範:
    if (is_category('news')) get_header('news');
    else get_header();
  3. 條件標籤組合:is_singular('post')、is_post_type_archive('product')、is_author()等擴展更多場景;
  4. 緩存友好:若使用全頁緩存(WP Rocket、Nginx FastCGI),動態Header會被緩存失效。解決方案:Edge Side Includes (ESI)或AJAX片段加載Header差異區塊。

常見坑點

  • 在functions.php中使用條件標籤無效(掛鉤太早),必須在模板文件中;
  • TEMPLATEPATH常量已棄用,推薦get_template_directory();
  • 子主題覆蓋父主題模板時,文件路徑以子主題為準。
copyright © 萬盛學電腦網 all rights reserved