web-dev-qa-db-fra.com

Comment les actions en bloc sont-elles gérées dans les classes de tables de liste personnalisées?

Je travaille sur un tableau de données personnalisé à afficher dans le tableau de bord WordPress. La table se remplit à partir d'une table de base de données que j'ai construite dans un plugin.

J'utilise l'exemple de tableau de liste personnalisé WordPress fourni pour la plupart de mes questions de codage dans ce domaine, mais cet exemple ne permet pas de gérer des actions en bloc. Voici le lien pour l'exemple documenté: http://wordpress.org/extend/plugins/custom-list-table-example/

Pour le traitement des actions en bloc, l'exemple fournit uniquement ceci:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Je souhaite savoir comment extraire les éléments sélectionnés pour l'action afin de pouvoir les supprimer ou modifier leurs entrées de base de données en conséquence.

9
Chiubaka

En supposant que vous utilisiez la fonction standard column_cb (), la table de liste transmettra les ID des lignes sélectionnées dans un tableau dans $ _GET, étiqueté comme quoi que vous ayez assigné à 'singulier' dans le constructeur de la table de liste.

Voici un column_cb () typique:

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

Par exemple, disons que j'ai une liste contenant des vidéos. Le constructeur ressemblerait à ceci:

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

    }

Ainsi, si vous cochez trois lignes dans la liste, sélectionnez "Supprimer" dans la liste des actions en bloc et cliquez sur appliquer, vous pourrez accéder aux lignes sélectionnées en utilisant $ _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);
            }
        }

    }
10
Nate Dudek