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


16

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

Ответы:


30

Вот 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;
   }
}

Поместите это в файл функций вашей дочерней темы, измените идентификатор страницы или 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


Спасибо за ответ, мне это понравилось, 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

Используйте здесь идентификатор страницы или слаг, а не URL mydomain.com/participate codex.wordpress.org/Conditional_Tags
Брэд Далтон

is_page ('участвуйте')
Брэд Далтон

9

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

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

// continue as normal for authenticated users

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

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

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


4

Как мы можем сказать вам, где его поместить, если вы не сказали нам, что и где вы хотите отобразить? Целые посты? Страницы? Пользовательские части страниц? Извините ... Я думаю, мой хрустальный шар сегодня не совсем работает.

Так как вы, и я цитирую вас: «новичок в WordPress», вы должны скорее учиться, чем просить прямой ответ.

Что касается того, где вы должны прочитать ссылку 1 ссылку. Это скажет вам, какой файл вам нужно положить в.

Что касается того, как это сделать, вы должны сначала прочитать ссылки ссылки 2 и 3.

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

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

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

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

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

Чтобы перенаправить использование headerс wp_login_url- снова, проверьте ссылки 1 и 2 ниже:

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

Ссылка:

  1. Заголовок - PHP
  2. wp_login_url

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

я могу сделать это с $ pagenow?
user3187719

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

4

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

<?php auth_redirect(); ?>

Wordpress Ссылка: auth_redirect()

Просто упомянуть другое решение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.