wp_redirect() WP 1.5.1

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

Для правильної роботи функції необхідно вказувати повний УРЛ:

http://www.example.com/blog/post_name
ftp://ftp.example.com/users/h/harriet/www/

Після функції потрібно обривати роботу скрипта функцією exit() чи die() .

У WordPress є аналогічна функція для редагування: allowed_redirect_hosts .

ВАЖЛИВО! wp_safe_redirect() рекомендується використовувати завжди , особливо коли $url передається користувачем.

Тоді як цю функцію потрібно використовувати, коли ми навмисно хочемо перенаправити користувача на інший сайт, як правило, тут $url жорстко прописується в коді, а не передається користувачем.

// ми точно не знаємо вказану URL на наш сайт чи ні і нам потрібно уникнути несподіваних редиректів.
wp_safe_redirect($url);

// ми навмисно перенаправляємо інший сайт, URL прописуємо жорстко.
wp_redirect( 'https://example.com/some/page');

Функція викликає PHP помилку (Output already started. Headers not sent.), якщо використовувати функцію після того, як заголовки (header) були надіслані. Тобто. якщо ми викличемо функцію у файлі теми, що відповідає за виведення контенту, функція працювати не буде. У таких випадках, як альтернатива, можна використовувати редирект на javascript:document.location.href = 'http://example.com';

Це init .

Заміна функції (перевизначення) — у плагіні можна створити функцію з такою самою назвою, тоді вона замінить поточну функцію.

Основа для:
wp_safe_redirect()

Хуки з функції

Повертає

true|false.

Використання

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

$x_redirect_by
(рядок)

Інтентифікатор того, хто зробив редирект. Дозволяє плагінам вказувати себе у редиректах.

Вказаний тут рядок буде додано до заголовка X-Redirect-Byвідповіді редиректу. Пр: X-Redirect-By: WordPress.

Типово: ‘WordPress’

Приклади

0

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

Приклад перенаправлення на головну сторінку блогу:

wp_redirect(home_url());
exit;
0

#2 Зовнішній редирект

Редирект може бути зовнішнім. У прикладі ми встановили статус код редиректу в 301, що означає, що ця сторінка (сторінка з якої ми перенаправляємо) переміщена назавжди:

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

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

Цей приклад показує як WordPress перенаправити користувача на іншу сторінку, з можливістю перевірити на якій сторінці сайту він знаходиться зараз. Тобто. в момент редиректу WP вже визначив сторінку, що відображається.

Для прикладу, скажімо, нам потрібно перенаправити користувача, якщо він відвідав сторінку з ID 10:

add_action( 'template_redirect', function() {
	if( is_page(10) ){
		wp_redirect ( 'http://example.org/path/to/subscribe', 301);
		exit;
	}
} );

нотатки

  • Global. true | false. $is_IIS

список змін

З версії 1.5.1Введено.
З версії 5.1.0The $x_redirect_by parameter був added.
З версії 5.4.0On invalid status codes, wp_die() is called.

Код wp_redirect() WP 6.0.2

function wp_redirect( $location, $status = 302, $x_redirect_by = 'WordPress' ) {
	global $is_IIS;

	/**
	 * Filters the redirect location.
	 *
	 * @ Since 2.1.0
	 *
	 * @param string $location Оцінка або URL-адреса до реdirect to.
	 * @param int $status HTTP response status code to use.
	 */
	$location = apply_filters( 'wp_redirect', $location, $status );

	/**
	 * Filters the redirect HTTP response status code to use.
	 *
	 * @ Since 2.3.0
	 *
	 * @param int $status HTTP response status code to use.
	 * @param string $location Оцінка або URL-адреса до реdirect to.
	 */
	$status = apply_filters( 'wp_redirect_status', $status, $location);

	if ( ! $location ) {
		return false;
	}

	if ( $status < 300 | | 399 < $status ) {
		wp_die( __( 'HTTP redirect status code must be a redirection code, 3xx.' ) );
	}

	$location = wp_sanitize_redirect($location);

	if ( ! $is_IIS && 'cgi-fcgi' !== PHP_SAPI ) {
		status_header($status); // Ці causa problems on IIS and some FastCGI setups.
	}

	/**
	 * Filters the X-Redirect-By header.
	 *
	 * Дозволяє applications to identify themselves when they're doing a redirect.
	 *
	 * @ Since 5.1.0
	 *
	 * @param string $x_redirect_by The application doing the redirect.
	 * @param int $status Status code to use.
	 * @param string $location Зберігати.
	 */
	$x_redirect_by = apply_filters( 'x_redirect_by', $x_redirect_by, $status, $location );
	if ( is_string( $x_redirect_by ) ) {
		header( "X-Redirect-By: $x_redirect_by");
	}

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

	return true;
}