#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, внутри моего кода плагина или снаружи?