2015-08-04 5 views
0

Я пытаюсь, чтобы он на моем сайте WordPress перенаправлялся на целевую страницу, если пользователь не вошел в систему, но он всегда застревает в цикле переадресации. Это в основном то, что у меня есть (в functions.php) ...Перенаправление на определенную страницу, если не вошел в систему WordPress

add_action('template_redirect', function() { 

     if (!is_user_logged_in() && ! is_page('login-to-view')){ 
      wp_redirect(site_url('/login-to-view')); 
      exit(); 
     } 

    }); 
+1

Существует сайт [wordpress.stackexchange.com] (http://wordpress.stackexchange.com) для конкретных вопросов WP. Кроме того, я считаю, что ваш ответ [этот вопрос почти с ТОЧНЫМ именем] (http://wordpress.stackexchange.com/questions/131879/how-to-redirect-non-logged-in-users-to-a- specific-page), или вы можете попробовать [этот вопрос с почти таким же именем] [http://wordpress.stackexchange.com/questions/56681/wordpress-redirect-to-landing-page-if-not -logged-in) – Ohgodwhy

+0

Вы пытались добавить трейлинг-косу к URL-адресу переадресации? 'wp_redirect (site_url ('/ login-to-view /'));' – rnevius

ответ

0

Допустим, пользователь не вошел в систему

Тогда ваш код думает таким образом:.

  1. Is Пользователь вошел в систему?
  2. НЕТ? Затем сделайте wp_redirect.

Пользователь перенаправляется на вашу страницу, и процесс начинается снова. Вот почему вы получаете бесконечный цикл.

Попробуйте изменять порядок проверки вместо:

<?php 

    add_action('template_redirect', function() { 

    if (! is_page('login-to-view') && ! is_user_logged_in()){ 
     wp_redirect(site_url('/login-to-view')); 
     exit(); 
    } 

}); 
+0

Это все равно заставляет его зацикливаться на цикле переадресации ... –

+0

Проверьте, что 'is_page ('login-to-view')' дает ожидаемый результат. Прокомментируйте блок 'if' и сделайте что-то вроде' if (is_page ('login-to-view')) {echo '';} '. Перейдите на некоторые страницы и посмотрите, работает ли это так, как должно. Особенно на странице входа в систему –

0

Вопрос заключается в том, что я имел функцию в functions.php. is_page пока не знает, на какой странице. Я перенес ее в заголовок, непосредственно перед объявлением типа документа и теперь работает только с этим ...

if (! is_page('login-to-view') && ! is_user_logged_in()){ 
    wp_redirect(site_url('/login-to-view')); 
    exit(); 
} 

Другое дело отметить ... Я не смог заставить его работать на моем локальном хосте, Я думаю, потому что site_url не может быть найден, и он просто перенаправлялся на localhost: 8888/login-to-view

Я использую MAMP, но я предполагаю, что вы можете настроить пути URL таким образом в версии PRO.

2

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

  1. Создать страницу входа в систему, например, www.site.com/login
  2. В моей functions.php добавить следующий код:
add_action('template_redirect', function() { 

    if((!is_page('login'))) { 

     if (!is_user_logged_in()) { 
      wp_redirect(site_url('/login'));  // redirect all... 
      exit(); 
     } 

    } 

}); 

Объяснение: Что происходит выше доступ к каждой странице на сайте ограничена для входа в систему, кроме стр. Вы можете исключить или включить дополнительные страницы, если хотите, а также URL-адреса wp-admin.

Смежные вопросы