Хук wp_headers
в WordPress позволяет фильтровать HTTP-заголовки перед их отправкой в браузер, предоставляя возможность модифицировать поведение сайта на уровне заголовков. Это может быть полезно для настройки кэширования, ограничения доступа, добавления заголовков безопасности и других целей. Рассмотрим, как использовать этот хук с примерами.
apply_filters( ‘wp_headers’, string[] $headers, WP $wp )
Что такое хук wp_headers
Хук wp_headers
используется для фильтрации HTTP-заголовков после их формирования, но до их отправки в браузер. Это дает возможность добавлять или изменять заголовки, необходимые для функциональности сайта, безопасности или других настроек.
Важно: Хук не сработает, если сайт использует кеширующий плагин или сторонние системы кеширования, так как кешированные страницы передаются до применения фильтров. В этом случае рекомендуется настроить заголовки на уровне сервера, например, в файле
.htaccess
.
Параметры
$headers
(array) — Ассоциативный массив заголовков, которые будут отправлены. Ключи — имена заголовков, значения — их содержимое.$wp
(WP) — Текущий экземпляр классаWP
, представляющий среду WordPress.
Основное использование
Подключить функцию к wp_headers
можно с помощью add_filter
:
add_filter( 'wp_headers', 'custom_headers_filter', 10, 2 );
function custom_headers_filter( $headers, $wp ) {
// Добавление или изменение заголовков...
return $headers;
}
Пример 1: Логирование HTTP-заголовков
Чтобы изучить, какие заголовки формируются на вашем сайте, можно вывести их в лог:
add_filter( 'wp_headers', 'log_http_headers', 10, 2 );
function log_http_headers( $headers, $wp ) {
error_log( print_r( $headers, true ) );
return $headers;
}
После добавления этого кода в файл functions.php
сайта можно просмотреть заголовки в файле журнала.
Пример 2: Запрет индексации сайта на стадии разработки
В процессе разработки важно предотвратить индексацию сайта поисковыми системами. Следующий код добавляет заголовок X-Robots-Tag
, чтобы запретить индексирование, если сайт находится в режиме разработки:
if ( 'development' === wp_get_environment_type() ) {
add_filter( 'wp_headers', 'disable_indexing_for_dev', 10, 1 );
function disable_indexing_for_dev( $headers ) {
$headers['X-Robots-Tag'] = 'noindex, nofollow';
return $headers;
}
}
Этот код проверяет тип среды (development) и добавляет нужный заголовок для поисковиков.
Пример 3: Установка заголовков безопасности
Для повышения безопасности можно добавить заголовки Content-Security-Policy
и X-Frame-Options
, которые ограничат загрузку ресурсов и защитят от атак через фреймы:
add_filter( 'wp_headers', 'add_security_headers', 10, 2 );
function add_security_headers( $headers, $wp ) {
$headers['Content-Security-Policy'] = "default-src 'self'; img-src 'self' data:;";
$headers['X-Frame-Options'] = 'DENY';
return $headers;
}
Этот код добавляет политику безопасности контента, которая ограничивает загрузку ресурсов только с текущего домена, и запрещает загрузку сайта в iframe.
Пример 4: Добавление уникальных заголовков для страниц
Предположим, вы хотите добавить уникальные заголовки для страниц на основе условий. Например, для страницы с идентификатором 42
добавим заголовок X-Custom-Header
:
add_filter( 'wp_headers', 'add_custom_header_for_specific_page', 10, 2 );
function add_custom_header_for_specific_page( $headers, $wp ) {
if ( is_page(42) ) {
$headers['X-Custom-Header'] = 'CustomValue';
}
return $headers;
}
Этот код проверяет, является ли текущая страница целевой, и добавляет к ней специальный заголовок.
Заключение
Хук wp_headers
— мощный инструмент для настройки HTTP-заголовков в WordPress. Используя его, вы можете гибко настраивать поведение сайта, добавляя или изменяя заголовки по необходимости.