Сайт виден только зарегистрированным пользователям

17 дек. 2012 г., 13:13:19
Просмотры: 14.8K
Голосов: 4

Как я могу отключить доступ для незарегистрированных пользователей? Если пользователь не вошел в систему, я хочу перенаправлять его на кастомную страницу регистрации/входа. Возможно ли это сделать с помощью приведенного ниже кода, так как я не хочу использовать плагин.

<?php
if ( is_user_logged_in() ) {
    echo 'Добро пожаловать, зарегистрированный пользователь!';
} else {
    echo 'Добро пожаловать, посетитель!';
}
?>

Спасибо.

0
Все ответы на вопрос 7
4
10

Напишите это в виде плагина:

add_action( 'template_redirect', 'auth_redirect' );

Как плагин на GitHub.

Это заставит всех посетителей войти в систему, если они еще не сделали этого.

В некоторых случаях это будет запрашивать вход каждый раз. Возможно, лучше использовать такой вариант:

is_admin() || add_action( 'template_redirect', function() {
    if ( ! is_user_logged_in() )
        auth_redirect();
});

Если вы хотите отправить статус 404 вместо этого, вы можете заменить auth_redirect() на:

wp_die( 'Нет.', 'Не найдено', [ 'response' => 404 ] );
17 дек. 2012 г. 13:49:55
Комментарии

Привет, есть ли способ перенаправить на определенную страницу?

Dev Guy Dev Guy
17 дек. 2012 г. 15:54:28

По умолчанию посетитель будет перенаправлен на страницу, которую он пытался просмотреть. Вы можете написать обертку, очень похожую на auth_redirect(), и установить $login_url на конкретную страницу.

fuxia fuxia
17 дек. 2012 г. 16:13:36

Я думаю, это может быть еще проще: можно удалить is_user_logged_in() и оставить только auth_redirect(), потому что auth_redirect() работает следующим образом: если пользователь вошел в систему, он ничего не делает. Если пользователь не вошел в систему, он перенаправляет его/ее на страницу входа.

cybmeta cybmeta
7 мая 2014 г. 18:57:09

@cybnet Без этой дополнительной проверки иногда происходит сбой.

fuxia fuxia
7 мая 2014 г. 19:01:05
0

Если вы не хотите изменять свой код, вы можете использовать этот плагин: Restricted Site Access. Он имеет высокий рейтинг и, по моему личному опыту, работает действительно хорошо.

Ограничьте доступ к вашему сайту только для посетителей, которые вошли в систему или заходят с определенного набора IP-адресов. Перенаправляйте ограниченных посетителей на страницу входа, редиректите их или показывайте сообщение или страницу. Отличное решение для экстранетов, публично размещенных интранетов или параллельных разработок/тестовых сайтов.

17 дек. 2012 г. 14:44:26
0

Вам, скорее всего, нужно просто добавить следующий код в ваш файл functions.php:

if ( is_user_logged_in() ) {
    echo 'Добро пожаловать, зарегистрированный пользователь!';
} else {
    wp_redirect(site_url('/wp-login.php?action=register'));
    exit();
}
17 дек. 2012 г. 13:44:04
0

Вот ответ, это легко сделать с помощью CSS..

  1. Основной div (.lor1) - это общий div, который начинается после header и заканчивается перед footer
  2. Добавить новый класс (.lor1.kun) в основной div, когда пользователь авторизован, этот основной класс будет display: block;
  3. Создать новый HTML, например, сообщение "Войдите сначала" (.lor1.user_not_login)

Добавьте этот код в header.php

 <?php     
if (!is_user_logged_in()) {
?> 
<style>
.lor1{ display:none;}
.lor1.kun{ display: block;}
.lor1.user_not_login{ display: block;}
</style>
<?php }  ?>
19 дек. 2013 г. 10:41:02
0

Ваш код на самом деле рабочий. Вам просто нужно вызывать правильные модули в нужных местах.

if( !is_user_logged_in() ){
    // show_registration_panel() 
} else {
   // Пользователь зарегистрирован. Продолжаем как обычно
}
9 янв. 2014 г. 04:45:02
0

Добавьте эту функцию в файл functions.php.

Когда пользователь не авторизован и пытается получить доступ к главной странице (ID страницы == 2), его перенаправит на страницу входа.

<?php
add_action('template_redirect','wpse64899_check_if_logged_in');
function wpse64899_check_if_logged_in()
{
    $pageid = 2; // или любой другой ID, который вам нужен
    if(!is_user_logged_in() && is_page($pageid))
    {
        $url = add_query_arg(
            'redirect_to',
            get_permalink($pageid),
            site_url('wp-login.php')
        );
        wp_redirect($url);
        exit;
    }
} ?>
9 янв. 2014 г. 06:22:05
0

Добавьте этот код в файл function.php вашей дочерней темы или родительской темы:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('home') && ! is_user_logged_in() ) {

wp_redirect( 'https://example.com/login', 301 ); 
  exit;
    }
}

Пожалуйста, замените "home" на ярлык (slug) страницы, которую вы не хотите показывать незалогиненным пользователям, и замените URL "https://example.com/login" на URL страницы, куда вы хотите перенаправлять незалогиненных пользователей (например, страницу входа или регистрации).

20 апр. 2017 г. 12:11:38