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

9

Je travaille sur un tableau de données personnalisé à afficher dans le tableau de bord WordPress. La table est renseignée à 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 cette zone, mais cet exemple ne permet pas de gérer des actions en bloc. Voici le lien pour l'exemple documenté: enlace

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 veux savoir comment extraire les éléments sélectionnés pour l'action afin de pouvoir les supprimer ou modifier leurs entrées dans la base de données en conséquence.

    
posée Chiubaka 03.08.2011 - 22:10

1 réponse

10

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 attribué à "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, supposons que j'ai une liste contenant des vidéos. Le constructeur ressemblerait à:

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

    }
    
réponse donnée Nate Dudek 22.08.2011 - 03:38

Lire d'autres questions sur les étiquettes