Как закрыть все страницы сайта и сделать их доступными только после авторизации?

Закрыть сайт вручную можно нехитрый через код.

  1. Откройте файл functions.php вашей темы.
  2. Добавьте следующий код:
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' );

Автор

Evgeni

На этом сайте делюсь заметками для начинающих по работе в macOS и Windows, а также по веб-разработке на WordPress. Надеюсь увидеть вас в числе своих подписчиков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *