Функция status_header()
устанавливает указанный HTTP статус в заголовок ответа сервера. Это может быть полезно для указания состояния страницы, например, 200 (OK) или 404 (Not Found).
В WordPress заголовки HTTP устанавливаются автоматически для всех страниц: 200 для существующих страниц, 404 для несуществующих и так далее. Однако в некоторых случаях может понадобиться переопределить установленный статус. Для этого функцию status_header()
следует вызывать во время события wp
или позже, например, в событиях template_redirect
или template_include
.
Эта функция используется в классе WP
при установке среды запроса перед событием wp
в методах WP::send_headers()
и WP::handle_404()
.
Важные моменты
- До вывода контента:
status_header()
должна быть вызвана до вывода любой информации на экран. Иначе возникнет PHP ошибка, так как заголовки должны устанавливаться до вывода контента. - PHP обертка: Эта функция является оберткой для PHP функции
header()
. - Описание статусов: Работает на основе функции
get_status_header_desc()
.
status_header( $header, $description = '' );
- $header (число): Код состояния HTTP. Обязательный параметр.
- $description (строка): Описание для заголовка. По умолчанию: ».
Пример 1: Закрытие сайта от индексации
Предположим, вы хотите изменить код статуса для всех страниц и закрыть сайт от индексации. Для этого добавьте следующий код в functions.php
:
add_action( 'wp', function() {
status_header( 503 );
} );
Пример 2: Установка заголовка состояния 403 (доступ запрещен)
Этот пример показывает, как отправить заголовок состояния 403, если пользователь пытается получить доступ к защищенной странице.
function restrict_access_to_page() {
if ( is_page( 'protected-page' ) && ! current_user_can( 'manage_options' ) ) {
status_header( 403 );
wp_die( 'Доступ запрещен. У вас нет прав для просмотра этой страницы.' );
}
}
add_action( 'template_redirect', 'restrict_access_to_page' );
В этом примере функция проверяет, является ли текущая страница защищенной (protected-page
) и имеет ли текущий пользователь право доступа (manage_options
). Если пользователь не имеет права доступа, отправляется заголовок 403 и выводится сообщение об ошибке.
Пример 3: Установка статуса 404 для неактивных событий
Если нужно установить статус 404 для всех типов записей event
, когда событие не активно, используйте следующий код:
add_action( 'template_redirect', 'genius_404_my_event', 1 );
function genius_404_my_event() {
global $post, $wp_query;
// Проверяем, является ли текущая запись записью типа 'event'
if ( is_singular( 'event' ) && ! genius_event_should_be_available( $post->ID ) ) {
// Устанавливаем статус 404
$wp_query->set_404();
status_header(404);
// Выводим шаблон 404
include( get_query_template( '404' ) );
exit;
}
}
// Функция для проверки доступности события
function genius_event_should_be_available($post_id) {
// Здесь реализуется логика проверки, активно ли событие
// Например, проверка мета-поля 'active'
$is_active = get_post_meta( $post_id, 'active', true );
return $is_active === 'yes';
}
Заключение
Функция status_header()
полезна для управления заголовками состояния HTTP в WordPress. Она позволяет легко отправлять различные коды состояния в зависимости от ситуации, обеспечивая правильную обработку запросов на сервере. Используя эту функцию, вы можете улучшить управление доступом и обработку ошибок на вашем сайте.