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
(рядок)
Опис для заголовка. З версії 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);

// Цей код Prints 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.0Added the $description parameter.

Код status_header() WP 6.0.2

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 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);
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *