Управление шапкой сайта в WordPress: от header.php до кастомных решений
Шаблон header.php: настройка и варианты
Файл header.php в WordPress отвечает за вывод верхней части сайта: логотипа, меню, мета-тегов, скриптов и стилей. Эффективное решение строится на сочетании условных тегов, хуков и функций ядра.
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<header id="masthead" class="site-header">
<div class="site-branding">
<?php
if ( has_custom_logo() ) {
the_custom_logo();
} else {
?>
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
<?php
}
?>
</div>
<nav id="site-navigation" class="main-navigation">
<?php
wp_nav_menu( array(
'theme_location' => 'primary',
'menu_id' => 'primary-menu',
) );
?>
</nav>
</header>Wp single php (файл single.php в wordpress)
- Отсутствие вызова
wp_head()- скрипты и стили не подключаются. - Неправильное расположение закрывающих тегов - нарушение валидности HTML.
- Конфликт с плагинами при дублировании хуков (например, добавление одного скрипта дважды).
- Игнорирование
body_class()- потеря CSS-классов для кастомизации.
Как разбить шапку на отдельные файлы для переиспользования?
Используйте get_template_part() для включения частей шапки (логотип, меню, поиск) из отдельных файлов. Это упрощает поддержку.
<header>
<?php get_template_part( 'template-parts/header/logo' ); ?>
<?php get_template_part( 'template-parts/header/navigation' ); ?>
<?php get_template_part( 'template-parts/header/search' ); ?>
</header>Wp blog header php (шаблоны header в wordpress)
get_template_part молча завершается. Следите за каталогом template-parts/.Как изменить header.php без изменения родительской темы?
Создайте дочернюю тему и скопируйте в неё файл header.php из родительской. WordPress автоматически загрузит версию из дочерней. Для включения стилей используйте functions.php дочерней:
add_action( 'wp_enqueue_scripts', function() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
} );Как показывать разный контент шапки на главной и внутренних страницах?
Условные теги is_front_page(), is_page() и другие позволяют гибко менять вывод.
<?php if ( is_front_page() ) : ?>
<h1>Добро пожаловать!</h1>
<?php else : ?>
<?php the_title( '<h1>', '</h1>' ); ?>
<?php endif; ?>is_home() вместо is_front_page() на статической главной странице - логика нарушается.Как добавить произвольный HTML или скрипты в шапку без редактирования темы?
Используйте хуки wp_head и wp_body_open через add_action в functions.php.
add_action( 'wp_head', function() {
echo '<meta name="custom-meta" content="значение">';
} );
add_action( 'wp_body_open', function() {
echo '<!-- Начало контента -->';
} );Как создать шапку с помощью блочного редактора (Full Site Editing)?
В темах на основе блоков (например, Twenty Twenty-Four) шапка создаётся через редактор сайта (Внешний вид → Редактор). Файл header.php не используется; шаблоны хранятся в /wp-content/themes/тема/patterns/. Чтобы добавить кастомный блок в шапку, отредактируйте шаблон шапки через FSE.
<!-- wp:group {"className":"custom-header"} -->
<div class="wp-block-group custom-header">
<!-- wp:site-logo /-->
<!-- wp:navigation {"ref":123} /-->
</div>
<!-- /wp:group -->Расширенные примеры включают полные сценарии использования шаблона header.php и его кастомизацию.
Расширенные примеры
1. Многоуровневое меню с иконками и поиском
Пример header.php с поддержкой двух меню (основное и социальные сети) и формой поиска:
<header class="site-header">
<div class="header-top">
<?php get_search_form(); ?>
<?php wp_nav_menu( array( 'theme_location' => 'social', 'depth' => 1, 'menu_class' => 'social-menu' ) ); ?>
</div>
<div class="header-main">
<?php the_custom_logo(); ?>
<nav>
<?php wp_nav_menu( array(
'theme_location' => 'primary',
'depth' => 3,
'menu_class' => 'main-menu',
'walker' => new Custom_Walker_Nav_Menu()
) ); ?>
</nav>
</div>
</header>Результат:
<header class="site-header">
<div class="header-top">
<form role="search" method="get" ...>...</form>
<ul id="menu-social" class="social-menu">...</ul>
</div>
<div class="header-main">
<a href="..." class="custom-logo-link"><img ...></a>
<nav><ul class="main-menu">...</ul></nav>
</div>
</header>2. Поддержка микроразметки (Schema.org) в шапке
Добавление атрибутов microdata для SEO:
<header itemscope itemtype="https://schema.org/WPHeader">
<span itemprop="name"><?php bloginfo( 'name' ); ?></span>
<nav itemscope itemtype="https://schema.org/SiteNavigationElement">
<?php wp_nav_menu( array( 'theme_location' => 'primary', 'itemprop' => 'url' ) ); ?>
</nav>
</header>Результат:
<header itemscope itemtype="https://schema.org/WPHeader">
<span itemprop="name">Мой блог</span>
<nav itemscope itemtype="https://schema.org/SiteNavigationElement">
<ul><li itemprop="url"><a href="/">Главная</a></li>...</ul>
</nav>
</header>3. Шапка для WooCommerce с корзиной и учётной записью
Условное отображение элементов магазина:
<header class="woo-header">
<?php if ( class_exists( 'WooCommerce' ) ) : ?>
<div class="header-cart">
<a href="<?php echo wc_get_cart_url(); ?>">
Корзина (<?php echo WC()->cart->get_cart_contents_count(); ?>)
</a>
</div>
<?php if ( is_user_logged_in() ) : ?>
<a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id') ); ?>">Мой аккаунт</a>
<?php endif; ?>
<?php endif; ?>
<?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
</header>4. Использование хуков для вставки аналитики
Скрипт Google Analytics через хук wp_head:
add_action( 'wp_head', 'add_gtag', 1 );
function add_gtag() {
if ( ! current_user_can( 'administrator' ) ) { // не показывать админу
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXX-Y"></script>
<script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-XXXXX-Y');</script>
<?php
}
}5. Кастомные шаблоны header для разных страниц
Использование get_header( 'слаг' ) для загрузки файла header-{слаг}.php. Например, в файле page-blog.php:
<?php get_header( 'blog' ); ?>
<!-- загрузит header-blog.php -->Пример содержимого header-blog.php:
<header class="blog-header">
<h2>Блог</h2>
<?php get_search_form(); ?>
</header>Результат:
<header class="blog-header">
<h2>Блог</h2>
<form role="search" ...>...</form>
</header>