Как перенаправить на другую страницу администратора в Wordpress?
Я пишу плагин Wordpress.
Я хочу выполнить перенаправление (после создания записей БД из данных POST и т.д.) на другую страницу ADMIN.
Ни заголовок ("Местоположение:...), ни wp_redirect() не работают - я получаю
Предупреждение: невозможно изменить информацию заголовка - заголовки, уже отправленные
который исходит из очевидной причины.
Как правильно выполнить перенаправление в Wordpress?
Ответы
Ответ 1
В действии формы добавьте "noheader = true" к URL-адресу действия. Это предотвратит вывод заголовков для области администрирования до перенаправления. Например:
<form name="post" action="<?php echo admin_url('admin.php?page=your-admin-page&noheader=true'); ?>" method="post" id="post">
Ответ 2
Если вы все еще хотите перенаправить с вашей страницы администрирования плагина на другую страницу администратора при использовании функций WP add_page *, после обработки вашего запроса вы можете просто повторить что-то вроде этого:
<script type="text/javascript">
window.location = '/whatever_page.php';
</script>
Это просто делает перенаправление на основе javascript на "/whatever_page.php", тем самым гарантируя отсутствие проблем с заголовками, уже отправленными WP, как сказал Крис Баланс.
Измените "/whatever_page.php" на что-то вроде "/wp-admin/admin.php?page=whatever_page"
Ответ 3
Для ссылки, добавленной с помощью add_submenu_page (или связанной функции), используйте возвращенный $hook_suffix, чтобы добавить действие к "load- $hook_suffix" и выполнить перенаправление там. Вот как вы подключаетесь к загрузке страницы до начала вывода.
Ответ 4
Я думаю, что делаю это неправильно.
Мой код находился внутри add_menu_page() внутри
add_action ('admin_menu',...) call
который, вероятно, вызывается позже во время запроса (после создания и отображения заголовка страницы).
Перемещение моего кода за пределы моих плагинов, в основную область работы - требуется очистка и исправления, но перенаправление работает.
В любом случае, спасибо за ответы.
Ответ 5
Вам нужно убедиться, что ничего не отправлено на вывод http до того, как произойдет перенаправление.
Вы можете установить "window.location('newlocation" ); и это все равно позволит вам перенаправить после отправки вывода в браузер.
Ответ 6
Я полагаю, вам просто нужно убедиться, что wp_redirect() приходит до отправки любого вывода.
Ответ 7
Загрузите его в template_redirect.
add_action('template_redirect', 'myplugin_template_redirect');
function myplugin_template_redirect() {
wp_redirect('http://www.example.com/', 301);
}