Как перенаправить на другую страницу администратора в 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);
}