Intereting Posts
Добавить число символов в пользовательский обмен Сообщения печатаются дважды Целевые страницы с использованием шаблона страницы одного продукта Woo Commerce Объединение и минимизация зависимостей для файлов JavaScript, находящихся в очереди Как определить метатеги Og в заголовке, используя условия Идентификатор автора из списка авторов wp Как изменить панель администратора, только если мой плагин загружен Попытка показать ссылку «Использовать как изображение» из окна «Вложение» из сценария t31os Разрешить вход в систему пользователям, которые не принадлежат к whitelisted ips Тема не отображается Фильтрация списка комментариев администратора для отображения только комментариев от текущего пользователя? Вставить несколько сообщений из результатов JSON Плагины отсутствуют в интерфейсе, но отображаются на FTP-сервере Изменение функции поиска темы, чтобы показывать результаты только из woocommerce? Как WordPress обнаруживает обновление плагина

wp_redirect дает предупреждение: невозможно изменить информацию заголовка – настраиваемый плагин

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

function process_bulk_action() { //Detect when a bulk action is being triggered if ('delete' === $this->current_action() ) { // In our file that handles the request, verify the nonce. $nonce = $_REQUEST['_wpnonce']; if ( !wp_verify_nonce( $nonce, 'bsp_delete_student' ) ) { die( 'Invalid security check!' ); } else { self::delete_student( absint( $_GET['student'] ) ); wp_redirect( esc_url( add_query_arg() ) ); exit; } } // If the delete bulk action is triggered if ( ( isset( $_POST['action'] ) && $_POST['action'] == 'delete' ) || ( isset( $_POST['action2'] ) && $_POST['action2'] == 'delete' ) ) { $delete_ids = esc_sql( $_POST['delete'] ); // loop over the array of record IDs and delete them foreach ($delete_ids as $id ) { self::delete_student( $id ); } wp_redirect( esc_url( add_query_arg() ) ); exit; } } 

Затем у меня есть функция для удаления:

  function delete_student($id){ global $wpdb; $wpdb->delete("{$wpdb->prefix}students", [ 'students_id' => $id ], [ '%d' ] ); } 

Когда я комментирую проверку nonce (которая не работает, всегда дает мне «Неверную проверку безопасности!») И пытаюсь удалить ученика, я получаю, что он не может изменять информацию заголовка, а выбранная строка не удаляется. Какие-либо предложения?

Вы не можете перенаправить вызов process_bulk_actions (), к моменту, когда WordPress обрабатывает, что заголовки файлов уже отправлены (точно не знаю почему). Вы должны просто написать сообщение и использовать wp_die ($ message) вместо die ().

Когда вы используете массовые действия, WordPress перенаправляет это действие на файл, показывающий список, и этот файл будет показывать ваше сообщение, только если вы используете wp_die () в process_bulk_actions ().

Кроме того, если вы хотите использовать обычные действия (а не навалом), например Edit | Удалить, вы можете использовать что-то вроде этого, прежде чем создавать объект списка и вызывать prepare_items ():

[Обратите внимание, что этот код отсутствует в файле класса списка, но в файле, использующем его, файл, который показывает таблицу]

 // modify yourslug to fit what you defined in construct 'singular' item // modify my-edit-file.php with the name of the file which is going to handle // your edit or delete action. // $itemId will be received and used by my-edit-file.php if(isset($_REQUEST['action']) && $_REQUEST['action'] === 'edit'){ $itemId = filter_input(INPUT_GET, 'yourslug', FILTER_VALIDATE_INT); require_once(plugin_dir_path(__FILE__) . 'my-edit-file.php'); wp_die(); } $table = new MyObjectListTable(); $table->prepare_items(); 

Попробуйте выполнить следующий код.

 add_action('init', 'start_buffer_output'); function start_buffer_output() { ob_start(); } 

попробуйте wp_safe_redirect() посмотреть, работает ли он на вас, это делает для вас санитарию