wp_redirect ведет себя странно. требует die () после? - PullRequest
0 голосов
/ 11 апреля 2010

Я пишу плагин WordPress, который перенаправляет пользователя. по какой-то причине wp_redirect работает не так, как мне кажется, а именно: кажется, что он вообще не перенаправляет пользователя, если я не введу команду die сразу после. вот код:

switch($_GET['wp_favorites_tax'])
{       
case 'post_tag':
  wp_redirect(add_query_arg('tag', $_GET['wp_favorites_term'], get_bloginfo('url')));
  die();
  break;
case 'category':
  wp_redirect(add_query_arg('cat', $_GET['wp_favorites_term'], get_bloginfo('url')));
  die();
  break;
default:
  wp_redirect(get_bloginfo('url'));
  die();
}

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

header("Location: $location);

для схожих целей, т. Е. Для работы по-прежнему требуется die (). действительно сбивает с толку меня. Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 апреля 2010

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

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

Всегда, всегда вызывайте die() или exit после выполнения перенаправления заголовка.

0 голосов
/ 11 апреля 2010

Обычно перенаправление HTTP содержит текст сообщения для клиентов, которые не следуют за заголовком автоматически. Попробуйте это в Opera (Опции: Сеть).

Поскольку wp_direct() можно назвать до перевода загружен, WordPress предлагает вам возможность добавить наше собственное (локализованное) тело сообщения.

Короче говоря: я думаю, что текущее решение является лучшим, если вы заботитесь о I18n.

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