wp_list_tables Massenaktionen

Wie auf Massenaktionen innerhalb einer erweiterten WP_List_Table ausgetriggers wird.

Ich habe die folgenden BulkAktionen in die Auswahlbox von may table eingefügt, aber auf Apply wird nichts passieren

Hier ist, wie ich meine Massenaktionen hinzugefügt habe

function get_bulk_actions() { $actions = array( 'delete' => 'Delete', 'parsing' => 'Parsen' ); return $actions; } 

und hier ist die Checkbox-Spalte

 function column_cb($item) { return sprintf( '', $item['Round'] ); } 

Solutions Collecting From Web of "wp_list_tables Massenaktionen"

Wenn Sie eine Massenaktion hinzufügen, müssen Sie auf diese Aktion reagieren. Einfach eine function hinzufügen tut nichts, man muss es nennen:

 class WPSE_List_Table extends WP_List_Table { public function __construct() { parent::__construct( array( 'singular' => 'singular_form', 'plural' => 'plural_form', 'ajax' => false ) ); } public function prepare_items() { $columns = $this->get_columns(); $sortable = $this->get_sortable_columns(); $hidden = array( 'id' ); $this->_column_headers = array( $columns, $hidden, $sortable ); $this->process_bulk_action(); } public function get_columns() { return array( 'cb' => '', // this is all you need for the bulk-action checkbox 'id' => 'ID', 'date' => __( 'Date', 'your-textdomain' ), 'title' => __( 'Title', 'your-textdomain' ), ); } public function get_sortable_columns() { return array( 'date' => array( 'date', false ), 'title' => array( 'title', false ), ); } public function get_bulk_actions() { return array( 'delete' => __( 'Delete', 'your-textdomain' ), 'save' => __( 'Save', 'your-textdomain' ), ); } public function process_bulk_action() { // security check! if ( isset( $_POST['_wpnonce'] ) && ! empty( $_POST['_wpnonce'] ) ) { $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ); $action = 'bulk-' . $this->_args['plural']; if ( ! wp_verify_nonce( $nonce, $action ) ) wp_die( 'Nope! Security check failed!' ); } $action = $this->current_action(); switch ( $action ) { case 'delete': wp_die( 'Delete something' ); break; case 'save': wp_die( 'Save something' ); break; default: // do nothing or something else return; break; } return; } } 

In prepare_items() rufen wir process_bulk_action() . Auf deiner Backend-Seite wirst du also so etwas haben:

 $table = new WPSE_List_Table(); printf( '

%s

', __( 'Your List Table', 'your-textdomain' ) ); echo '
'; $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRIPPED ); $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT ); printf( '', $page ); printf( '', $paged ); $table->prepare_items(); // this will prepare the items AND process the bulk actions $table->display(); echo '
'; echo '
';

Zunächst erstellen Sie eine Instanz Ihrer List-Table-class. Dann erstellen Sie ein Formular und rufen prepare_items() . Bei diesem Aufruf werden die process_bulk_action() verarbeitet, da wir die Methode process_bulk_action() in prepare_items() .

Im obigen Beispiel verwenden wir post als Methode, um die Daten zu senden. Also können wir die Massenaktion aus dem Post-Array holen, wenn wir die Massenaktionen innerhalb der class (oder aus anderen Gründen) nicht verarbeiten wollten.

 // this is the top bulk action!! $action = ( isset( $_POST['action'] ) ) ? filter_input( INPUT_POST, 'action', FILTER_SANITIZE_STRIPPED ) : 'default_top_bulk_action'; // this is the bottom bulk action!! $action2 = ( isset( $_POST['action2'] ) ) ? filter_input( INPUT_POST, 'action2', FILTER_SANITIZE_STRIPPED ) : 'default_bottom_bulk_action'; switch ( $action ) {} switch ( $action2 ) {} 

Sie können die Massenaktion beliebig aus dem Post / Get-Array abrufen (abhängig davon, welche Methode zum Senden der Daten verwendet wurde).

Das habe ich auf verschiedenen Websites gefunden. Es funktioniert immer noch nicht für mich, aber es funktionierte, als ich noch die Beispieldaten in meiner benutzerdefinierten Listentabelle hatte.

  function process_bulk_action() { //Detect when a bulk action is being triggered... if( 'delete'===$this->current_action() ) { wp_die('Items deleted (or they would be if we had items to delete)!'); } }