wake-up-neo.net

massenaktionen für wp_list_table

Wie man Massenaktionen in einer erweiterten WP_List_Table auslöst.

Ich habe die folgenden Bulk-Aktionen zum Auswahlfeld von may table hinzugefügt, aber auf Apply (Übernehmen) passiert eigentlich nichts

hier erfahren Sie, wie ich meine Bulk-Aktionen hinzugefügt habe

function get_bulk_actions() {
  $actions = array(

        'delete'    => 'Delete',

        'parsing'    => 'Parsen'
  );

  return $actions;
}

und hier ist die Kontrollkästchenspalte

function column_cb($item) {

    return sprintf(

            '<input type="checkbox" name="record[]" value="%d" />', $item['Round']
        );    

}
2
fefe

Wenn Sie eine Massenaktion hinzufügen, müssen Sie auf diese Aktion reagieren. Das Hinzufügen einer Funktion reicht nicht aus, Sie müssen sie aufrufen:

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'    => '<input type="checkbox" />', // 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. Auf deiner Backend-Seite wirst du also so etwas haben:

$table = new WPSE_List_Table();

printf( '<div class="wrap" id="wpse-list-table"><h2>%s</h2>', __( 'Your List Table', 'your-textdomain' ) );

echo '<form id="wpse-list-table-form" method="post">';

$page  = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRIPPED );
$paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );

printf( '<input type="hidden" name="page" value="%s" />', $page );
printf( '<input type="hidden" name="paged" value="%d" />', $paged );

$table->prepare_items(); // this will prepare the items AND process the bulk actions
$table->display();

echo '</form>';

echo '</div>';

Zuerst erstellen Sie eine Instanz Ihrer List-Table-Klasse. Dann erstellen Sie ein Formular und rufen prepare_items() auf. Bei diesem Aufruf werden die Massenaktionen verarbeitet, da wir die Methode process_bulk_action() innerhalb von prepare_items() aufrufen.

Im obigen Beispiel verwenden wir post als Methode zum Senden der Daten. Daher können wir die Massenaktion aus dem Post-Array abrufen, wenn wir die Massenaktionen nicht innerhalb der Klasse verarbeiten möchten (oder aus anderen Gründen).

// 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 an einer beliebigen Stelle aus dem Post/Get-Array abrufen (je nachdem, welche Methode zum Senden der Daten verwendet wurde).

6
Ralf912

das habe ich auf mehreren Websites gefunden. Es funktioniert immer noch nicht bei mir, aber es hat funktioniert, 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)!');
    }

}
0
Jan

WP-Liste mit Massenaktionen unter Verwendung eines "Arrays" DATA

https://wpengineer.com/2426/wp_list_table-a-step-by-step-guide/ (Machen Sie es als Plugin) https://Gist.github.com/Latz/7f923479a4ed135e35b2 (für functions.php)

WP-Liste mit Massenaktionen unter Verwendung von "SQL" -DATEN

https://www.smashingmagazine.com/2011/11/native-admin-tables-wordpress/ (for functions.php )

Prost!

0
samjco