Перенаправление на основе реферера отправляет ERR_TOO_MANY_REDIRECTS - PullRequest
0 голосов
/ 27 мая 2020

Я получил этот код, который по какой-то причине не работает полностью, хотя мне кажется, что я на правильном пути, и я догадываюсь, почему он не работает, хотя я не знаю, как исправить.

Идея такова, что если HTTP_REFERER = сеть, содержащая слово example, и вы не вошли в него, перенаправьте вас на mysite.com/login

add_action( 'init', 'example_redirect');
function metorik_redirect() {
if (!is_user_logged_in() && strpos($_SERVER['HTTP_REFERER'], "example")){
        wp_redirect( site_url('/login/') ); 
        exit; 
    }   
}

Кажется, что приведенное выше правило срабатывает при возникновении условий встречаются, но затем он возвращает ERR_TOO_MANY_REDIRECTS

Я предполагаю, что он продолжает находить референт в качестве примера каждый раз, когда он проходит через эту функцию, а затем никогда не выходит из нее. Как указано, это всего лишь предположение.

ОБНОВЛЕНИЕ 1: Я пробовал использовать этот другой код, который я нашел здесь stackoverflow, с теми же результатами:

add_action('template_redirect', 'redirect_if_example');
function redirect_if_example(){
    if ( !is_user_logged_in() && coming_from_example(wp_get_referer()) ){
         wp_safe_redirect( "/login/" );
         exit;
     } else{
          wp_safe_redirect( get_home_url() );
          exit;
     }
}

function coming_from_example($url_string){
   if ($url_string){
      $url = parse_url($url_string);
      return strpos($url['host'], 'example.com');
   } else {
     return false;
   }
}

Спасибо С уважением

1 Ответ

1 голос
/ 27 мая 2020

Попробуйте выполнить перенаправление в правильном хуке и используйте правильную функцию strpos, например: (этот код должен быть в ваших функциях. php файл)

add_action( 'template_redirect', 'example_redirect');
function example_redirect() {
if (!is_user_logged_in() && strpos($_SERVER['HTTP_REFERER'], "example") !== false){
        wp_redirect( wp_login_url() ); 
        exit; 
    }   
}

Также убедитесь, что вы действительно переходите с веб-сайта в котором есть строка example.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...