AUTH_REDIRECT() │ WP 1.5.0
Что такое AUTH_REDIRECT?
Функция auth_redirect проверяет, авторизован ли пользователь. Если нет, то он будет перенаправлен на страницу входа. Эта функция полезна для защиты контента на вашем сайте — если кто-то пытается получить доступ к защищенной странице, функция перенаправит их на страницу входа.
Когда функция вызывается с определенной страницы, она проверяет, вошел ли пользователь. Если нет, пользователь будет перенаправлен таким образом, что после входа они попадут обратно на ту страницу, которую изначально хотели открыть.
Замена функции
Функция auth_redirect принадлежит к числу pluggable functions — это значит, что её можно заменить в плагине. Эта функция начинает работать только после загрузки всех плагинов. Поэтому вы не можете вызывать её сразу из кода плагина. Нужно использовать хуки, например, plugins_loaded или init.
Если вы хотите заменить эту функцию, можно создать свою функцию с тем же именем в вашем плагине.
Использование функции
auth_redirect();
Примеры применения
Пример 1: Требовать вход для просмотра сайта
Чтобы пользователи могли видеть сайт, им нужно войти:
if ( ! is_user_logged_in() ) {
auth_redirect();
}
Пример 2: Закрыть доступ к записям для неавторизованных пользователей
Чтобы скрыть записи от неавторизованных пользователей:
if ( ! is_user_logged_in() && is_single() ) {
auth_redirect();
}
Используйте этот код в начале файла header.php.
Хранение и возвращение значений
Функция auth_redirect ничего не возвращает (null).
Как работает auth_redirect
Вот как работает функция auth_redirect внутри WordPress:
function auth_redirect() {
$secure = ( is_ssl() || force_ssl_admin() );
$secure = apply_filters( 'secure_auth_redirect', $secure );
// Если требуется https, а запрос идет по http, перенаправляем.
if ( $secure && ! is_ssl() && str_contains( $_SERVER['REQUEST_URI'], 'wp-admin' ) ) {
if ( str_starts_with( $_SERVER['REQUEST_URI'], 'http' ) ) {
wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
exit;
} else {
wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
exit;
}
}
$scheme = apply_filters( 'auth_redirect_scheme', '' );
$user_id = wp_validate_auth_cookie( '', $scheme );
if ( $user_id ) {
do_action( 'auth_redirect', $user_id );
// Если пользователь хочет использовать ssl, а сессия не ssl, перенаправляем.
if ( ! $secure && get_user_option( 'use_ssl', $user_id ) && str_contains( $_SERVER['REQUEST_URI'], 'wp-admin' ) ) {
if ( str_starts_with( $_SERVER['REQUEST_URI'], 'http' ) ) {
wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
exit;
} else {
wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
exit;
}
}
return; // Куки хорошие, так что всё нормально.
}
// Если куки недействительны, принуждаем к входу.
nocache_headers();
if ( str_contains( $_SERVER['REQUEST_URI'], '/options.php' ) && wp_get_referer() ) {
$redirect = wp_get_referer();
} else {
$redirect = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
}
$login_url = wp_login_url( $redirect, true );
wp_redirect( $login_url );
exit;
}
Изменения и обновления
- 1.5.0 — Функция была введена.
Связанные функции
- wp_redirect() — Перенаправление на другую страницу.
- wp_safe_redirect() — Безопасное перенаправление на URL.
- nocache_headers() — Установка заголовков ответа, чтобы отключить кеширование.
Теперь вы знаете, как использовать функцию auth_redirect для защиты контента вашего сайта WordPress!