get_header()是WordPress核心函数中最基础但功能强大的函数之一,它的作用远不止是简单地调用头部模板。下面我将详细介绍它的各种高级用法和实用技巧。

一、基础用法回顾

<?php get_header(); ?>

默认会调用主题目录中的header.php文件。

二、高级用法详解

1. 多头部模板支持

<?php get_header('custom'); ?>

这会调用header-custom.php文件,允许你为不同页面类型创建不同的头部:

  • header-home.php - 首页专用

  • header-shop.php - WooCommerce商店页面

  • header-minimal.php - 极简风格头部

2. 条件加载不同头部

<?php
if (is_front_page()) {
    get_header('home');
} elseif (is_page_template('landing-page.php')) {
    get_header('landing');
} else {
    get_header();
}
?>

3. 带参数的头部调用

<?php 
get_header(null, ['show_banner' => true, 'title' => '自定义标题']);
?>

header.php中可以通过$args获取这些参数:

<?php 
$args = wp_parse_args($args, [
    'show_banner' => false,
    'title' => get_bloginfo('name')
]);
?>

4. 动态修改头部内容

add_filter('document_title_parts', function($parts) {
    if (is_single()) {
        $parts['title'] = '【精选】'.$parts['title'];
    }
    return $parts;
});

get_header();

三、实用开发技巧

1. 缓存控制

<?php
// 在特定页面禁用缓存
if (is_user_logged_in()) {
    nocache_headers();
}
get_header();
?>

2. 动态CSS类

// header.php
<body <?php body_class($args['body_class'] ?? ''); ?>>

调用时:

<?php get_header(null, ['body_class' => 'dark-mode']); ?>

3. A/B测试不同头部

<?php
$header_version = (rand(0,1) === 1) ? 'a' : 'b';
get_header('variant-'.$header_version);
?>

四、性能优化技巧

1. 延迟加载非关键资源

// header.php
<?php if (!isset($args['delay_assets'])): ?>
    <!-- 关键CSS -->
    <style><?php echo file_get_contents(get_theme_file_path('/assets/css/critical.css')); ?></style>
<?php endif; ?>

2. 条件性加载资源

<?php
$load_heavy_assets = $args['load_heavy_assets'] ?? !wp_is_mobile();
get_header(null, ['load_heavy_assets' => $load_heavy_assets]);
?>

五、与其它函数的组合用法

1. 结合get_template_part()

<?php
// 在头部中包含一个模块
get_header();
get_template_part('template-parts/header', 'announcement');
?>

2. 与wp_head钩子配合

// 在特定头部版本中添加特殊脚本
add_action('wp_head', function() {
    if (get_header_template_name() === 'header-landing.php') {
        echo '<meta name="robots" content="noindex">';
    }
}, 1);

六、创建无头版头部

<?php 
// header-none.php
?><!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<title><?php wp_title('|', true, 'right'); ?></title>
<?php wp_head(); ?>
</head>
<body>
<div id="content">

调用方式:

<?php get_header('none'); ?>

七、调试技巧

1. 检查当前使用的头部模板

function debug_header_template() {
    echo '当前头部模板: ' . get_header_template_name();
}
add_action('wp_footer', 'debug_header_template');

2. 测量头部加载时间

$header_start = microtime(true);
get_header();
$header_time = microtime(true) - $header_start;
error_log("头部加载耗时: {$header_time}秒");

八、实际应用案例

1. 多语言网站头部切换

<?php
$current_lang = pll_current_language(); // Polylang插件
get_header($current_lang);
?>

2. 会员专区和普通用户不同头部

<?php
if (pmpro_hasMembershipLevel()) { // Paid Memberships Pro插件
    get_header('member');
} else {
    get_header('guest');
}
?>

get_header()函数的灵活性使得WordPress主题开发可以非常精细化地控制网站头部表现,合理运用这些技巧可以显著提升开发效率和网站性能。