Özel liste tablosu sınıflarında toplu işlemler nasıl ele alınır?


9

WordPress panosunda görüntülemek için özel bir veri tablosu üzerinde çalışıyorum. Tablo, bir eklenti içinde oluşturduğum bir veritabanı tablosundan doldurulur.

Bu alandaki kodlama sorularımın çoğu için sağlanan WordPress Özel Liste Tablosu örneğini kullanıyorum, ancak örnekte toplu eylemleri işlemek için hiçbir şey yok. Dokümante edilmiş örnek için link: http://wordpress.org/extend/plugins/custom-list-table-example/

Toplu işlemleri işlemek için örnek yalnızca bunu sağlar:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Eylem için seçilen öğeleri nasıl çekeceğini bilmek istiyorum, böylece onları silebilir veya veritabanı girdilerini buna göre düzenleyebilirim.

Yanıtlar:


11

Standart column_cb () işlevini kullandığınızı varsayarsak, liste tablosu $ _GET içindeki bir dizide seçilen satırların kimliklerini liste tablosunun yapıcısında 'tekil' olarak atadığınız herhangi bir etiket olarak geçirir.

İşte tipik bir 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
        );
    }

Örneğin, videoları görüntüleyen bir liste tablom olduğunu varsayalım. Yapıcı şöyle görünecektir:

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

    }

Bu nedenle, liste tablosundaki üç satırı işaretlerseniz, toplu işlemler listesinden "Sil" i seçip uygula'ya basarsanız, $ _GET ['video'] kullanarak seçilen satırlara erişebilirsiniz.

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

    }

Teşekkürler! Diğer WordPress tablolarıyla aynı şekilde çalışan bir "düzenle" toplu işlemin nasıl uygulanacağı hakkında herhangi bir fikriniz var mı?
Chiubaka

UI çok daha fazla dahil olacak hariç, benzer bir şekilde başa çıkabilirsiniz. Muhtemelen böyle bir durumda varsayılan process_bulk_actions () yöntemini kullanmaz, çünkü en kullanışlı arayüz muhtemelen ızgara satırlarını düzenlenebilir alanlara değiştiren bir olurdu. Bu durumda, $ _GET dizisinde seçili öğeleri almaya devam edersiniz, ancak liste tablosu sınıfında HTML'nin çıkış biçimini geçersiz kılmanız gerekir. Bir senaryonun çok daha karmaşık, ancak kimliklere erişim şekliniz aynı.
Nate Dudek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.