Wie werden Massenaktionen in benutzerdefinierten Listentabellenklassen behandelt?


9

Ich arbeite an einer benutzerdefinierten Datentabelle, die im WordPress-Dashboard angezeigt werden soll. Die Tabelle wird aus einer Datenbanktabelle gefüllt, die ich in einem Plugin erstellt habe.

Ich habe das bereitgestellte Beispiel für eine benutzerdefinierte WordPress-Listentabelle für die meisten meiner Codierungsfragen in diesem Bereich verwendet, aber das Beispiel enthält nichts für die Behandlung von Massenaktionen. Hier ist der Link für das dokumentierte Beispiel: http://wordpress.org/extend/plugins/custom-list-table-example/

Für die Verarbeitung der Massenaktionen bietet das Beispiel nur Folgendes:

    function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {

        wp_die('Items deleted!');
    }

}

Ich möchte wissen, wie die für die Aktion ausgewählten Elemente abgerufen werden, damit ich sie löschen oder ihre Datenbankeinträge entsprechend bearbeiten kann.

Antworten:


11

Angenommen, Sie verwenden die Standardfunktion column_cb (), übergibt die Listentabelle die IDs der ausgewählten Zeilen in einem Array in $ _GET, das im Konstruktor der Listentabelle als alles gekennzeichnet ist, was Sie 'Singular' zugewiesen haben.

Hier ist eine typische column_cb ():

function column_cb($item){
        return sprintf(
            '<input type="checkbox" name="%1$s[]" value="%2$s" />',
            /*$1%s*/ $this->_args['singular'],  //Let's simply repurpose the table's singular label ("video")
            /*$2%s*/ $item->id             //The value of the checkbox should be the record's id
        );
    }

Angenommen, ich habe eine Listentabelle, in der Videos angezeigt werden. Der Konstruktor würde folgendermaßen aussehen:

function __construct(){
        global $status, $page;

        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'video',     //singular name of the listed records
            'plural'    => 'videos',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );

    }

Wenn Sie also drei Zeilen in der Listentabelle aktivieren, "Löschen" aus der Liste der Massenaktionen auswählen und auf "Anwenden" klicken, können Sie mit $ _GET ['video'] auf die ausgewählten Zeilen zugreifen.

function process_bulk_action() {

        //Detect when a bulk action is being triggered...
        if( 'delete'===$this->current_action() ) {
            foreach($_GET['video'] as $video) {
                //$video will be a string containing the ID of the video
                //i.e. $video = "123";
                //so you can process the id however you need to.
                delete_this_video($video);
            }
        }

    }

Vielen Dank! Irgendwelche Ideen, wie man eine Massenaktion "Bearbeiten" implementiert, die genauso funktioniert wie andere WordPress-Tabellen?
Chiubaka

Sie könnten auf ähnliche Weise damit umgehen, außer dass die Benutzeroberfläche viel komplizierter wäre. In einem solchen Fall würde ich wahrscheinlich nicht die Standardmethode process_bulk_actions () verwenden, da die am besten verwendbare Schnittstelle wahrscheinlich eine ist, die die Rasterzeilen in bearbeitbare Felder ändert. In diesem Fall erhalten Sie die ausgewählten Elemente weiterhin im Array $ _GET, müssen jedoch die Art und Weise überschreiben, in der der HTML-Code in der Listentabellenklasse ausgegeben wird. Ein Szenario ist viel komplexer, aber die Art und Weise, wie Sie auf die IDs zugreifen, ist dieselbe.
Nate Dudek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.