You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WooCommerce及其他WordPress页面创建双自定义头部?

实现WooCommerce与其他页面的自定义头部区分

嘿,这个需求其实很容易实现,我来给你一步步拆解:

首先,你需要先准备两个自定义的头部模板文件:

  • 复制主题当前的header.php,重命名为header-shop.php,然后根据需求修改这个文件的内容,这就是WooCommerce页面会调用的专属头部。
  • 再复制一份header.php(或者直接用原文件,如果原文件就是你想要的非Woo页面头部),重命名为header-default.php,调整成你需要的普通页面头部样式。

接下来有两种实现方式,推荐第二种更高效的钩子方法:

方法一:修改主题模板文件(适合新手快速上手)

找到主题目录下的核心模板文件,比如index.php、single.php、page.php、archive.php等,把里面原来的get_header();替换成下面的条件判断代码:

// 判断是否是WooCommerce相关页面
if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) {
    // 调用WooCommerce专属头部
    get_header('shop');
} else {
    // 调用普通页面的自定义头部
    get_header('default');
}

这种方法需要修改多个模板文件,好处是直观,你能明确看到每个页面调用的头部模板。

方法二:使用钩子过滤(更优雅,无需修改多个模板)

直接在当前激活主题的functions.php文件末尾添加以下代码,通过WordPress的钩子自动替换头部模板:

add_filter( 'get_header_template', 'custom_header_for_woocommerce' );
function custom_header_for_woocommerce( $template ) {
    // 覆盖所有WooCommerce核心页面:产品页、购物车、结账、用户账户
    if ( is_woocommerce() || is_cart() || is_checkout() || is_account_page() ) {
        // 检查主题目录是否存在header-shop.php
        $shop_header = locate_template( 'header-shop.php' );
        if ( $shop_header ) {
            return $shop_header;
        }
    }
    // 其他页面调用自定义的default头部,如果不存在则返回默认header.php
    $default_header = locate_template( 'header-default.php' );
    return $default_header ? $default_header : $template;
}

补充说明:

  • is_woocommerce() 会匹配产品归档页、单个产品页;is_cart()、is_checkout()、is_account_page() 分别对应购物车、结账、用户账户页面,这些条件加起来能覆盖所有WooCommerce核心场景。
  • 如果你不需要单独的header-default.php,想让普通页面继续使用原有的header.php,可以把代码里的$default_header相关逻辑删掉,直接返回$template即可。
  • 操作前记得备份functions.php和头部模板文件,避免代码错误导致网站无法访问。
  • 如果你用的是子主题,所有自定义文件和代码都要放在子主题目录下,不要修改父主题文件,这样主题更新时不会丢失自定义内容。

内容的提问来源于stack exchange,提问作者Emo IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:48:48