Перенаправление незалогиненных пользователей с определенных страниц

19 мар. 2014 г., 02:54:20
Просмотры: 17.4K
Голосов: 1

Я видел подобные вопросы, но они не совсем соответствуют тому, что я хочу сделать.

По сути мне нужно: Если пользователь не авторизован И находится на -этой странице- ИЛИ -этой странице- ИЛИ -этой странице, перенаправить его на -эту страницу- (которая является кастомной страницей регистрации)

Я пробую модифицировать этот код, но он не работает. Буду благодарен за любые подсказки.

<?php
function redirect_non_logged_in(){
  // если пользователь не авторизован и находится на этих страницах
  if( !is_user_logged_in() && is_page( array( 250, 253 ) ) ) { 
    // Перенаправление на кастомную страницу регистрации
    wp_redirect(site_url('/user-registration'));
    exit();
  }
}
add_filter('get_header','redirect_non_logged_in');
?>
0
Все ответы на вопрос 2
3

Ваша функция работает, но 'get_header' — это уже слишком поздно.

Используйте template_redirect вместо этого:

add_action( 'template_redirect', function() {

  if ( is_user_logged_in() || ! is_page() ) return;

  $restricted = array( 250, 253 ); // ID всех ограниченных страниц

  if ( in_array( get_queried_object_id(), $restricted ) ) {
    wp_redirect( site_url( '/user-registration' ) ); 
    exit();
  }

});

Убедитесь, что не включаете ID страницы 'user-registration' в массив $restricted, иначе вы столкнётесь с бесконечным перенаправлением...

19 мар. 2014 г. 07:17:46
Комментарии

Очень признателен. Это работает.

rohn rohn
20 мар. 2014 г. 08:07:31

Извините за вмешательство, но вместо того, чтобы дублировать вопрос, я спрошу вас здесь. Я использую немного измененный код на основе вашего ответа: add_action( 'template_redirect', function() { if ( !is_page('login') || !is_user_logged_in() ) { wp_redirect( site_url( '/login', 301 ) ); exit(); }});, однако у меня все равно возникает бесконечный редирект. Можете указать, в чем проблема?

Frederick Andersen Frederick Andersen
13 авг. 2014 г. 04:52:45

Ваша проблема в том, что login — это не страница, поэтому is_page('login') никогда не может быть true. Определить, находитесь ли вы на странице входа в WordPress не так просто, ознакомьтесь с этим ответом, чтобы узнать, как это сделать. @FrederickAndersen

gmazzap gmazzap
13 авг. 2014 г. 15:51:17
0
-3

Установите плагин ограничения страниц https://da.wordpress.org/plugins/pagerestrict/

В настройках выберите "не показывать форму входа"

Вставьте ссылку в сообщение об ограничении: <a href="https://ваша-страница-входа/">Войти</a> для просмотра этой страницы/записи

7 нояб. 2017 г. 14:32:49