Як перенаправити користувачів, які не ввійшли в систему, на певну сторінку?


16

Як перенаправити користувачів, які не ввійшли в систему, запитуючи певну сторінку / URL, на іншу сторінку / URL та відобразити повідомлення типу "лише для членів". Я знаю, що його досить легко кодувати за допомогою функції! Is_user_logged_in (), але я не знаю, як її кодувати, тому що я новачок у WordPress. Будь ласка, скажіть мені файл, щоб також поставити код.

Відповіді:


30

Ось два приклади, які вам потрібно буде трохи змінити, щоб він працював для ваших конкретних потреб.

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;
   }
}

Помістіть це у файл дочірних функцій вашої дитини, змініть ідентифікатор сторінки або кулі та 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-адресу або постійну посилання. Щодо повідомлення dispaly, залиште його, я хочу просто перенаправити їх, коли вони вимагають певної URL-адреси без реєстрації.
користувач3187719

чи можу я це зробити з $ pagenow?
користувач3187719

@ 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.