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

30 янв. 2014 г., 22:23:38
Просмотры: 151K
Голосов: 26

Как перенаправить неавторизованных пользователей, запрашивающих определенную страницу/URL, на другую страницу/URL и показать сообщение вроде "только для участников". Я знаю, что это довольно легко сделать с помощью функции !is_user_logged_in(), но я не знаю, как написать код, потому что я новичок в WordPress. Подскажите также, в какой файл нужно поместить код.

0
Все ответы на вопрос 4
3
43

Вот 2 примера, которые вам нужно будет немного модифицировать, чтобы они работали под ваши конкретные нужды.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Поместите этот код в файл функций дочерней темы, измените ID или slug страницы и URL для редиректа.

Вы также можете использовать код такого вида:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

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

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Вы можете добавить сообщение прямо на страницу или, если хотите показывать сообщение для всех незалогиненных пользователей, добавьте его в код.

http://codex.wordpress.org/Function_Reference/wp_redirect

31 янв. 2014 г. 10:03:01
Комментарии

Спасибо за ответ. Я сделал так: `add_action('template_redirect', 'redirect_to_specific_page');

function redirect_to_specific_page() {

if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) {

wp_redirect('http://mydomain.com/login', 301); exit; } }` Но это не работает

user3187719 user3187719
31 янв. 2014 г. 11:15:58

Используйте ID страницы или slug, а не URL http://mydomain.com/participate http://codex.wordpress.org/Conditional_Tags

Brad Dalton Brad Dalton
31 янв. 2014 г. 11:22:50

is_page('participate')

Brad Dalton Brad Dalton
31 янв. 2014 г. 11:23:28
0
23

Это будет лучше:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// продолжать как обычно для авторизованных пользователей

Этот код перенаправляет пользователя на страницу входа. После авторизации пользователь будет перенаправлен обратно на защищенную страницу, к которой он изначально пытался получить доступ.

Документация здесь:

https://codex.wordpress.org/Function_Reference/auth_redirect

17 нояб. 2017 г. 18:00:57
0

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

<?php auth_redirect(); ?>

Справка WordPress: auth_redirect()

Просто упомянем ещё одно решение.

13 дек. 2014 г. 15:38:46
3

Ознакомьтесь со ссылкой 1 ниже. Она подскажет, какой файл вам нужно редактировать.

Ссылки 2 и 3 дадут вам базовое понимание работы с управляющими конструкциями.

В целом это должно выглядеть примерно так:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'Только для участников';
}

Конечно, приведённый выше код должен находиться внутри цикла. Вы можете сделать его настолько сложным или простым, насколько захотите. Например, вместо простого текста для незалогиненных пользователей можно вывести целую форму регистрации или — как я бы рекомендовал — разделённый экран, где пользователь может войти (если у него уже есть аккаунт, но он забыл авторизоваться) или зарегистрироваться (если у него ещё нет аккаунта).

  1. Иерархия шаблонов
  2. Условные теги
  3. Цикл

Добавлено после комментариев ниже:

Для перенаправления используйте header вместе с wp_login_url — снова проверьте ссылки 1 и 2 ниже:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Ссылки:

  1. Header - PHP
  2. wp_login_url
30 янв. 2014 г. 23:57:31
Комментарии

На самом деле я не знаю функцию в WordPress, которая возвращает запрашиваемый URL или постоянную ссылку. А что касается сообщения для отображения, оставьте его, я просто хочу перенаправлять пользователей, когда они запрашивают определенный URL без авторизации.

user3187719 user3187719
31 янв. 2014 г. 06:14:38

Можно ли это сделать с помощью $pagenow?

user3187719 user3187719
31 янв. 2014 г. 06:53:25

@user3187719 отредактировал мой оригинальный ответ и добавил решение для перенаправления. PS. $pagenow? Ты пытаешься убить муху из пушки — конечно, это сработает, но зачем так сложно? Будь проще. PS2: Учи PHP и WP Codex.

Borek Borek
31 янв. 2014 г. 17:17:54