wp_redirect

Перенаправляет (редиректит) на указанный УРЛ, можно указать статус редиректа (301, 302…).

Для правильной работы функции нужно указывать полный УРЛ:

wp_redirect( $location, $status );
exit;
$location(строка) (обязательный)
УРЛ страницы на которую нужно перенаправить.
По умолчанию: нет
$status(число)

Статус код перенаправления (код состояния HTTP):

  • 300 — Multiple Choices (Множество выборов);
  • 301 — Moved Permanently (Перемещено окончательно);
  • 302 — Found (Найдено);
  • 303 — See Other (Смотреть другое);
  • 304 — Not Modified (Не изменялось);
  • 305 — Use Proxy (Использовать прокси);
  • 306 — (зарезервировано);
  • 307 — Temporary Redirect (Временное перенаправление).
Статус 302 означает временное изменение адреса. Если роботу нужно указать, что страница перемещена навсегда, используйте статус — 301. Полный список статусов смотрите здесь.

По умолчанию: 302

Примеры

#1. Внутренний редирект

Пример перенаправления на главную страницу блога:

wp_redirect( home_url() ); 
exit;

#2. Внешний редирект

Редирект может быть и внешним. В примере, мы установили статус код редиректа в 301, что означает что данная страница (страница с которой мы перенаправляем) перемещена навсегда:

wp_redirect( 'http://www.example.com', 301 ); 
exit;

#3. Редирект через хук template_redirect

Этот пример показывает как в WordPress перенаправить пользователя на другую страницу, с возможностью проверить на какой странице сайта он находится сейчас. Т.е. в момент редиректа WP уже определил отображаемую страницу.

Для примера, допустим, нам нужно перенаправить пользователя, если он посетил страницу с ID 10:

<?php
function wp_redirect($location, $status = 302) {
	global $is_IIS;

	/**
	 * Filters the redirect location.
	 *
	 * @since 2.1.0
	 *
	 * @param string $location The path to redirect to.
	 * @param int    $status   Status code to use.
	 */
	$location = apply_filters( 'wp_redirect', $location, $status );

	/**
	 * Filters the redirect status code.
	 *
	 * @since 2.3.0
	 *
	 * @param int    $status   Status code to use.
	 * @param string $location The path to redirect to.
	 */
	$status = apply_filters( 'wp_redirect_status', $status, $location );

	if ( ! $location )
		return false;

	$location = wp_sanitize_redirect($location);

	if ( !$is_IIS && PHP_SAPI != 'cgi-fcgi' )
		status_header($status); // This causes problems on IIS and some FastCGI setups

	header("Location: $location", true, $status);

	return true;
}