Перенаправление из плагина WordPress

#php #wordpress #redirect

#php #wordpress #перенаправление

Вопрос:

Как правильно выполнить перенаправление из плагина?

К моменту выполнения кода в моем плагине WordPress уже распечатал заголовок в браузере, поэтому я не понимаю, как можно сделать перенаправление 302/301 из плагина.

Я не хочу делать перенаправление Javascript по очевидным причинам!

Спасибо

Ответ №1:

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

 # In your 'admin_menu' callback:
$page_hook = add_options_page('My Plugin', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options');
add_action( 'load-' . $page_hook , 'my_ob_start');

# Somewhere else in your plugin
function my_ob_start() {
    ob_start();
}
  

Очевидно, Измените имена и т. Д., Но Это должно позволить вам использовать header() В любом месте страницы вашего плагина. Однако у него есть некоторые недостатки, ошибки не будут отображаться по умолчанию и т. Д., Поэтому используйте на свой страх и риск.

Ответ №2:

 add_filter('wp_redirect', 'plugin_redirect' , 10, 2);

function plugin_redirect($location, $status) {
   // Your redirect function code here
   return $location;
}
  

В функции add_filter

  • 2-й аргумент — это имя вашей функции фильтра.
  • 3-й аргумент — это ваш приоритет функции.
  • 4-й аргумент — это количество аргументов, принятых вашей функцией фильтра.

Функция фильтра wp_redirect принимает 2 аргумента.

Комментарии:

1. Не могли бы вы привести пример использования, пожалуйста. Куда идет вызов add_filter, внутри моего кода плагина или снаружи?