Закрыть сайт вручную можно нехитрый через код.
- Откройте файл
functions.php
вашей темы. - Добавьте следующий код:
function poet_restrict_access() {
if ( ! is_user_logged_in() && ! is_page('login') ) {
wp_redirect( wp_login_url() );
exit;
}
}
add_action( 'template_redirect', 'poet_restrict_access' );
Всё! Теперь сайт будет перенаправлять на страницу входа, если пользователь не авторизован.
Так как админка WordPress доступна только авторизованным пользователям, то «сюрпризов» не будет. Админка будет доступна 🙂
Разрешение доступа к определённым страницам (например, исключим страницу входа, регистрации и контактов)
function poet_restrict_access() {
// Список страниц, которые остаются открытыми
$allowed_pages = array( 'login', 'register', 'contact' );
if ( ! is_user_logged_in() && ! is_page( $allowed_pages ) ) {
wp_redirect( wp_login_url() ); // Перенаправление на страницу входа
exit;
}
}
add_action( 'template_redirect', 'poet_restrict_access' );
Если ваш сайт использует AJAX (например, в теме или плагинах), нужно разрешить доступ к AJAX-запросам, иначе они перестанут работать. Добавьте это в функцию:
function poet_restrict_access() {
// Разрешить доступ к AJAX и cron-запросам
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return;
}
if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
return;
}
// Список страниц, которые остаются открытыми
$allowed_pages = array( 'login', 'register', 'contact' );
if ( ! is_user_logged_in() && ! is_page( $allowed_pages ) ) {
wp_redirect( wp_login_url() ); // Перенаправление на страницу входа
exit;
}
}
add_action( 'template_redirect', 'poet_restrict_access' );
Настройка редиректа после входа
function custom_login_redirect( $redirect_to, $request, $user ) {
// Убедимся, что пользователь авторизован
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
return home_url(); // Перенаправление на главную страницу
}
return $redirect_to;
}
add_filter( 'login_redirect', 'custom_login_redirect', 10, 3 );
Как закрыть и админку ?
Если вы хотите ограничить доступ к админке для определённых ролей или полностью исключить его, добавьте это:
function restrict_admin_access() {
if ( ! current_user_can( 'manage_options' ) && ! wp_doing_ajax() ) {
wp_redirect( home_url() );
exit;
}
}
add_action( 'admin_init', 'restrict_admin_access' );