Intereting Posts
Добавить текстовую область на домашнюю страницу детской темы Выберите данные из базы данных и перечислите их в Loop (WordPress) Как добавить «поддельный» родительский элемент в постоянную ссылку? Как найти другого пользователя в buddypress? Способ включения сообщений как с & без определенной meta_key в args для wp_query? Передайте the_post () в качестве параметра как отображать отображаемое изображение для отдельной записи для определенной категории Как извлечь изображение галереи из базы данных? Почему пользователь добавляется обратно в базу данных после удаления? Предложения по подходу к новому плагину Я застрял TinyMCE Advances удаляет пробелы ("") Исключить термин таксономии с пользовательским типом сообщения в поиске WooCommerce – список клиентов и список гостей? Как показать пункт меню панели управления только пользователям с определенными возможностями? Filepath to Chosen для опции «Домашняя страница» – какая функция?

wp_redirect зависает, но возвращает true

Я понятия не имею, что я делаю неправильно, но я не могу заставить wp_redirect фактически перенаправить страницу. Я разрешил wp_debug проверять ошибки «уже отправленные», но ничего. Я установил плагин «Лучшее перенаправление HTTP», чтобы проверить ответ, но он говорит, что найден 302.

Если я проверю ответ wp_redirect, как это, он говорит «успех перенаправления». Но в конце концов ничего не происходит, ошибок не обнаружено.

if ( wp_redirect( admin_url( 'admin.php?page=plugin_test&success=item_saved' ) ) ) { echo 'redirect success'; } else { echo 'no'; } 

Я попытался добавить ob_start в init и добавить действие для admin_init и вызвать ob_start, но оба они не имели никакого значения. Это урезанная версия кода, который у меня есть, но у него такая же проблема.

Что происходит в полном коде, так это то, что пользователь заполняет форму, добавляет элемент и сохраняется в db. После этого пользователь перенаправляется и отображается пользовательский msg. Весь скрипт отлично работает, за исключением последнего перенаправления.

 class Submit_Test { function __construct() { add_action( 'init', array( $this, 'init' ) ); } public function init() { add_action( 'admin_menu', array( $this, 'create_admin_menu' ) ); } public function create_admin_menu() { add_menu_page( 'Plugin test', 'Menu', 'manage_options', 'plugin_test', array( $this, 'item_list' ) ); } public function item_list() { if ( isset( $_REQUEST['actions'] ) ) { $this->add_item(); } if ( isset( $_GET['success'] ) ) { $this->show_success_notifications(); } if ( $_GET['action']['add_item'] ) { ?> <form method="post" action="" accept-charset="utf-8"> <input type="submit" name="actions" class="button-primary" value="add_item" /> </form> <?php } else { ?> <ul> <li><a href="http://localhost/wp-latest/wp-admin/admin.php?page=plugin_test">Current Item</a></li> <li><a href="http://localhost/wp-latest/wp-admin/admin.php?page=plugin_test&action=add_item">Add Item</a></li> </ul> <?php } } public function add_item() { if ( wp_redirect( admin_url( 'admin.php?page=plugin_test&success=item_saved' ) ) ) { echo 'redirect success'; } else { echo 'no'; } exit(); } public function show_success_notifications() { echo 'yes'; } } new Submit_Test; 

Любые идеи о том, как получить перенаправление на работу, и что я делаю неправильно? У меня нет идей о том, что может быть проблемой здесь.

wp_redirect () не выходит автоматически и почти всегда следует за выходом.

Вы пытались добавить выход после wp_redirect? Это может быть так просто, как это

Вы слишком поздно используете wp_redirect, ваш код не выполняется до тех пор, пока не будет запущен крюк admin_menu, который после того, как заголовки уже отправлены в браузер и поэтому слишком поздно для перенаправления пользователя.

Создайте новую функцию, которая запускается на крюке admin_init и прислушивается к тому, что ваше действие там перенаправляется.

 public function init() { add_action( 'admin_menu', array( $this, 'create_admin_menu' ) ); add_action( 'admin_init', array( $this, 'do_actions' ) ); } public function do_actions() { if ( isset( $_REQUEST['actions'] ) && $_REQUEST['actions'] == 'MY_UNIQUE_ACTION_NAME' ) { $this->add_item(); } }