WordPress как на ладони
rgbcode is looking for WordPress developers.

status_header()WP 2.0.0

Устанавливает указанный статус в заголовок HTTP ответа сервера. Код состояния HTTP (200, 404 и т.д.).

Для всех страниц, WordPress устанавливает HTTP заголовки состояния автоматически: 200 - для существующих страниц, 404 - для несуществующих и т.д.

Чтобы перебить установленный заголовок, функцию нужно вызывать во время события wp или позднее, например: template_redirect, template_include и т.д.

Функция используется при установке среды запроса WordPress в классе WP перед событием wp в методах: WP::send_headers() и WP::handle_404()

Функцию нужно использовать до того, как на экран будет выведена какая бы то ни была информация. В противном случае вы получите PHP ошибку. По правилам PHP заголовки (headers) должны быть установлены до вывода контента.

Эта функция обертка для функции PHP header().

Работает на основе: get_status_header_desc()
Хуки из функции

Возвращает

null. Ничего не возвращает.

Использование

status_header( $header, $description );
$header(число) (обязательный)

Код состояния HTTP. Смотрите подробное описание каждого статуса здесь.

Возможные коды состояния:

1xx: Informational (информационные):

  • 100 — Continue (продолжай)
  • 101 — Switching Protocols (переключение протоколов)
  • 102 — Processing (идёт обработка)
  • 105 — Name Not Resolved (не удается преобразовать DNS-адрес сервера)

2xx: Success (успешно):

  • 200 — OK (хорошо)
  • 201 — Created (создано)
  • 202 — Accepted (принято)
  • 203 — Non-Authoritative Information (информация не авторитетна)
  • 204 — No Content (нет содержимого)
  • 205 — Reset Content (сбросить содержимое)
  • 206 — Partial Content (частичное содержимое)
  • 207 — Multi-Status (многостатусный)
  • 226 — IM Used (использовано IM)

3xx: Redirection (перенаправление):

  • 300 — Multiple Choices (множество выборов)
  • 301 — Moved Permanently (перемещено навсегда)
  • 302 — Moved Temporarily (перемещено временно)
  • 302 — Found (найдено)
  • 303 — See Other (смотреть другое)
  • 304 — Not Modified (не изменялось)
  • 305 — Use Proxy (использовать прокси)
  • 306 — зарезервировано (код использовался только в ранних спецификациях)
  • 307 — Temporary Redirect (временное перенаправление)

4xx: Client Error (ошибка клиента):

  • 400 — Bad Request (плохой, негодный запрос)
  • 401 — Unauthorized (неавторизован)
  • 402 — Payment Required (необходима оплата)
  • 403 — Forbidden (запрещено)
  • 404 — Not Found (не найдено)
  • 405 — Method Not Allowed (метод не поддерживается)
  • 406 — Not Acceptable (неприемлемо)
  • 407 — Proxy Authentication Required (необходима аутентификация прокси)
  • 408 — Request Timeout (истекло время ожидания)
  • 409 — Conflict (конфликт)
  • 410 — Gone (удалён)
  • 411 — Length Required (необходима длина)
  • 412 — Precondition Failed (условие ложно)
  • 413 — Request Entity Too Large (размер запроса слишком велик)
  • 414 — Request-URI Too Large (запрашиваемый URI слишком длинный)
  • 415 — Unsupported Media Type (неподдерживаемый тип данных)
  • 416 — Requested Range Not Satisfiable (запрашиваемый диапазон не достижим)
  • 417 — Expectation Failed (ожидаемое неприемлемо)
  • 418 — I'm a teapot (я - чайник)
  • 422 — Unprocessable Entity (необрабатываемый экземпляр)
  • 423 — Locked (заблокировано)
  • 424 — Failed Dependency (невыполненная зависимость)
  • 425 — Unordered Collection (неупорядоченный набор)
  • 426 — Upgrade Required (необходимо обновление)
  • 428 — Precondition Required (необходимо предусловие)
  • 429 — Too Many Requests (слишком много запросов)
  • 431 — Request Header Fields Too Large (поля заголовка запроса слишком большие)
  • 434 — Requested host unavailable. (Запрашиваемый адрес недоступен)
  • 449 — Retry With (повторить с)
  • 451 — Unavailable For Legal Reasons (недоступно по юридическим причинам)
  • 456 — Unrecoverable Error (некорректируемая ошибка)
  • 499 — Используется Nginx, когда клиент закрывает соединение до получения ответа.

5xx: Server Error (ошибка сервера):

  • 500 — Internal Server Error (внутренняя ошибка сервера)
  • 501 — Not Implemented (не реализовано)
  • 502 — Bad Gateway (плохой, ошибочный шлюз)
  • 503 — Service Unavailable (сервис недоступен)
  • 504 — Gateway Timeout (шлюз не отвечает)
  • 505 — HTTP Version Not Supported (версия HTTP не поддерживается)
  • 506 — Variant Also Negotiates (вариант тоже проводит согласование)
  • 507 — Insufficient Storage (переполнение хранилища)
  • 508 — Loop Detected (обнаружена петля)
  • 509 — Bandwidth Limit Exceeded (исчерпана пропускная ширина канала)
  • 510 — Not Extended (не расширено)
  • 511 — Network Authentication Required (требуется сетевая аутентификация)
$description(строка)
Описание для заголовка. C версии 4.4.
По умолчанию: ''

Примеры

0

#1 Закрыть весь сайт от индексации

Предположим, вы хотите изменить код статуса для всех страниц: вам нужно закрыть все страницы сайта от индексации.

Для этого добавьте этот код в functions.php:

add_action( 'wp', function(){
	status_header( 503 ); 
} );
0

#2 Ставим статус 404 конкретному посту

Предположим нам нужно установить статус 404 для всех типов записей event, в зависимости от состояния. Т.е. у нас есть событие, если оно не активно, то ему нужно присвоить статус 404 и вывести для него код станицы 404.

add_action( 'template_redirect', 'rr_404_my_event', 1 );

// this code prints a 404 page for an inactive event
// and sets the status to 404
function rr_404_my_event() {
	global $post, $wp_query;

	if ( is_singular( 'event' ) && ! rr_event_should_be_available( $post->ID ) ) {

		// put a status
		$wp_query->set_404();
		status_header(404);

		// output the 404.php file
		include( get_query_template( '404' ) );

		exit;
	}
}

функция rr_event_should_be_available() проверяет должен ли быть текущий пост доступен.

Заметки

Список изменений

С версии 2.0.0 Введена.
С версии 4.4.0 Added the $description parameter.

Код status_header() WP 6.4.3

function status_header( $code, $description = '' ) {
	if ( ! $description ) {
		$description = get_status_header_desc( $code );
	}

	if ( empty( $description ) ) {
		return;
	}

	$protocol      = wp_get_server_protocol();
	$status_header = "$protocol $code $description";
	if ( function_exists( 'apply_filters' ) ) {

		/**
		 * Filters an HTTP status header.
		 *
		 * @since 2.2.0
		 *
		 * @param string $status_header HTTP status header.
		 * @param int    $code          HTTP status code.
		 * @param string $description   Description for the status code.
		 * @param string $protocol      Server protocol.
		 */
		$status_header = apply_filters( 'status_header', $status_header, $code, $description, $protocol );
	}

	if ( ! headers_sent() ) {
		header( $status_header, true, $code );
	}
}
5 комментариев
    Войти