Bagaimana tindakan massal ditangani di kelas tabel daftar kustom?

9

Saya sedang mengerjakan tabel data khusus untuk ditampilkan di dasbor WordPress. Tabel tersebut terisi dari tabel basis data yang saya buat dalam sebuah plugin.

Saya telah menggunakan contoh Tabel Daftar Kustom WordPress yang disediakan untuk sebagian besar pertanyaan koding saya di area ini, tetapi contohnya tidak memiliki apa pun untuk menangani tindakan massal. Berikut ini tautan untuk contoh yang terdokumentasi: http://wordpress.org/extend/plugins/custom-list-table-example/

Untuk memproses tindakan massal, contohnya hanya menyediakan ini:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Saya ingin tahu cara menarik item yang dipilih untuk tindakan sehingga saya dapat menghapusnya atau mengedit entri basis data mereka.

Chiubaka
sumber

Jawaban:

11

Dengan asumsi Anda menggunakan fungsi column_cb () standar, tabel daftar akan meneruskan ID dari baris yang dipilih dalam array dalam $ _GET, dilabeli sebagai apa pun yang Anda tetapkan untuk 'tunggal' dalam konstruktor tabel daftar.

Berikut ini adalah 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
        );
    }

Misalnya, katakanlah saya memiliki tabel daftar yang menampilkan video. Konstruktor akan terlihat seperti:

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

    }

Jadi, jika Anda memeriksa tiga baris dalam tabel daftar, pilih "Hapus" dari daftar tindakan massal, dan tekan berlaku, Anda dapat mengakses baris yang dipilih dengan menggunakan $ _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);
            }
        }

    }
Nate Dudek
sumber
Terima kasih! Adakah ide tentang bagaimana menerapkan tindakan massal "edit" yang bekerja dengan cara yang sama seperti tabel WordPress lainnya?
Chiubaka
Anda bisa mengatasinya dengan cara yang serupa, kecuali UI akan lebih banyak terlibat. Saya mungkin tidak akan menggunakan metode process_bulk_actions () default dalam kasus seperti ini, karena antarmuka yang paling dapat digunakan mungkin adalah yang mengubah baris kisi ke bidang yang dapat diedit. Dalam hal ini, Anda masih mendapatkan item yang dipilih dalam array $ _GET, tetapi Anda harus menimpa cara HTML dihasilkan di kelas tabel daftar. Skenario yang jauh lebih kompleks, tetapi cara Anda mengakses ID adalah sama.
Nate Dudek