Come vengono gestite le azioni in blocco nelle classi di tabelle di elenchi personalizzate?


9

Sto lavorando su una tabella di dati personalizzati da visualizzare nella dashboard di WordPress. La tabella viene popolata da una tabella di database che ho creato in un plug-in.

Ho usato l'esempio fornito della tabella degli elenchi personalizzati di WordPress per la maggior parte delle mie domande sulla codifica in quest'area, ma l'esempio non ha nulla per la gestione di azioni in blocco. Ecco il link per l'esempio documentato: http://wordpress.org/extend/plugins/custom-list-table-example/

Per l'elaborazione delle azioni in blocco, l'esempio fornisce solo questo:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Voglio sapere come estrarre gli elementi selezionati per l'azione in modo da poterli eliminare o modificare le voci del database di conseguenza.

Risposte:


11

Supponendo che tu stia utilizzando la funzione column_cb () standard, la tabella degli elenchi passerà gli ID delle righe selezionate in un array in $ _GET, etichettati come qualsiasi cosa tu abbia assegnato a "singolare" nel costruttore della tabella degli elenchi.

Ecco un tipico 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
        );
    }

Ad esempio, supponiamo che io abbia una tabella di elenco che visualizza video. Il costruttore sarebbe simile a:

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?
        ) );

    }

Quindi, se controlli tre righe nella tabella elenco, seleziona "Elimina" dall'elenco azioni collettive e premi applica, puoi accedere alle righe selezionate usando $ _GET ['video'].

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

    }

Grazie! Qualche idea su come implementare un'azione collettiva "modifica" che funzioni allo stesso modo delle altre tabelle di WordPress?
Chiubaka,

Potresti gestirlo in un modo simile, tranne che l'interfaccia utente sarebbe molto più coinvolta. Probabilmente non userei il metodo process_bulk_actions () predefinito in un caso come questo, perché l'interfaccia più utilizzabile sarebbe probabilmente quella che cambia le righe della griglia in campi modificabili. In tal caso, ottieni ancora gli elementi selezionati nella matrice $ _GET, ma dovresti sovrascrivere il modo in cui l'HTML viene emesso nella classe della tabella elenco. Molto più complesso di uno scenario, ma il modo in cui accedi agli ID è lo stesso.
Nate Dudek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.