wp_safe_redirect()
Безопасное перенаправление. Перенаправляет с помощью wp_redirect() предварительно проверив хост на наличие в базе разрешенных хостов.
Прежде чем перенаправить на указанный хост, функция проверяет его и перенаправление произойдет только в том случае, если хост присутствует в базе разрешенных хостов (по умолчанию: домен сайта).
Если хост не разрешен, то пользователя перенаправит на http://example.com/wp-admin
, вместо указанной ссылки. С помощью такого подхода можно оградить пользователей от попадания на небезопасный сайт.
Список разрешенных хостов может быть расширен плагинами, см. хук allowed_redirect_hosts.
По умолчанию в разрешенные хосты WP входит только текущий хост (домен) сайта.
Смотрите также: wp_validate_redirect() - функция которая проверяет URL для перенаправления.
Pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена... Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init.
Замена функции (переопределение) — в must-use или обычном плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.
Хуки из функции
Возвращает
true|false
. Ничего не возвращает.
Использование
wp_safe_redirect( $location, $status ); exit;
- $location(строка) (обязательный)
- URL перенаправления.
- $status(число)
- Статус перенаправления.
По умолчанию: 302 - $x_redirect_by (строка|false) (WP 5.1)
Идентификатор того, кто сделал редирект. Позволяет плагинам указывать себя в редиректах.
Указанная тут строка будет добавлена в заголовок
X-Redirect-By
ответа редиректа. Пр:X-Redirect-By: WordPress
.По умолчанию: 'WordPress'
Примеры
#1 Безопасное перенаправление
Представим, что ссылку для перенаправления мы передаем функции wp_safe_redirect() и она меняется в зависимости от действий пользователя, т.е. может быть всегда разной. А нам нужно сделать так, чтобы перенаправление было только на внутренние страницы сайта. Нам поможет такой код:
if( isset( $_POST['location'] ) && $location = $_POST['location'] ){ wp_safe_redirect( $location ); exit; }
Список изменений
С версии 2.3.0 | Введена. |
С версии 5.1.0 | The return value from wp_redirect() is now passed on, and the $x_redirect_by parameter was added. |
Код wp_safe_redirect() wp safe redirect WP 6.7.1
function wp_safe_redirect( $location, $status = 302, $x_redirect_by = 'WordPress' ) { // Need to look at the URL the way it will end up in wp_redirect(). $location = wp_sanitize_redirect( $location ); /** * Filters the redirect fallback URL for when the provided redirect is not safe (local). * * @since 4.3.0 * * @param string $fallback_url The fallback URL to use by default. * @param int $status The HTTP response status code to use. */ $fallback_url = apply_filters( 'wp_safe_redirect_fallback', admin_url(), $status ); $location = wp_validate_redirect( $location, $fallback_url ); return wp_redirect( $location, $status, $x_redirect_by ); }