wp_redirect gibt eine Warnung aus: Header-Informationen können nicht geändert werden – benutzerdefiniertes Plugin

Ich versuche eine Löschaktion in einem benutzerdefinierten Plugin auszuführen, das eine benutzerdefinierte Tabelle verwendet und wp_list_table zum Anzeigen der Daten erweitert. Das Problem ist, wann immer ich versuche, die Daten zu löschen, die ich bekomme, kann Kopfzeile Informationen nicht ändern und ich kann nicht es beheben. Der Code:

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; } } 

Ich habe dann eine function zum Löschen:

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

Wenn ich die Nonce-Prüfung auszeichne (was nicht funktioniert, gibt mir immer die “Ungültige Sicherheitsprüfung!”) Und versuche, einen Studenten zu löschen, bekomme ich die Header-Informationen nicht ändern und die ausgewählte Zeile wird nicht gelöscht. Irgendwelche Vorschläge?

Solutions Collecting From Web of "wp_redirect gibt eine Warnung aus: Header-Informationen können nicht geändert werden – benutzerdefiniertes Plugin"

Sie können den Aufruf von process_bulk_actions () nicht redirect, wenn WordPress gerade verarbeitet, dass die Header der Datei bereits gesendet wurden (weiß nicht genau warum). Sie sollten einfach eine Nachricht schreiben und wp_die ($ message) anstelle von diey () verwenden.

Wenn Sie Massenaktionen verwenden, leitet WordPress diese Aktion in die Datei um, die die Liste anzeigt, und diese Datei wird nur dann Ihre Nachricht anzeigen, wenn Sie wp_die () in process_bulk_actions () verwenden.

Wenn Sie die normalen Aktionen (nicht bulk) wie Edit | verwenden möchten Löschen, Sie können so etwas verwenden, bevor Sie das Listenobjekt erstellen und prepare_items () aufrufen:

[Beachten Sie, dass dieser Code nicht in der List-classndatei enthalten ist, sondern in der Datei, die ihn verwendet, die Datei, die die Tabelle anzeigt.]

 // 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(); 

Versuchen Sie folgenden Code.

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

wp_safe_redirect() , ob es für dich funktioniert, es macht die Bereinigung für dich