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

9

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'ai utilisé l'exemple de tableau de liste personnalisé WordPress fourni pour la plupart de mes questions de codage dans ce domaine, mais l'exemple n'a rien pour gérer les actions en masse. Voici le lien pour l'exemple documenté: http://wordpress.org/extend/plugins/custom-list-table-example/

Pour le traitement des actions en masse, 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 de base de données en conséquence.

Chiubaka
la source

Réponses:

11

En supposant que vous utilisez la fonction standard column_cb (), la table de liste transmettra les ID des lignes sélectionnées dans un tableau dans $ _GET, étiquetés comme ce que vous avez 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 un tableau de liste qui affiche 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?
        ) );

    }

Donc, si vous cochez trois lignes dans le tableau de liste, sélectionnez "Supprimer" dans la liste des actions en bloc et appuyez sur Appliquer, vous pouvez accéder aux lignes sélectionnées en utilisant $ _GET ['vidéo'].

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
la source
Merci! Avez-vous des idées sur la façon de mettre en œuvre une action en bloc "modifier" qui fonctionne de la même manière que les autres tableaux WordPress?
Chiubaka
Vous pouvez le gérer de manière similaire, sauf que l'interface utilisateur serait beaucoup plus impliquée. Je n'utiliserais probablement pas la méthode process_bulk_actions () par défaut dans un cas comme celui-ci, car l'interface la plus utilisable serait probablement celle qui change les lignes de la grille en champs modifiables. Dans ce cas, vous obtenez toujours les éléments sélectionnés dans le tableau $ _GET, mais vous devez remplacer la façon dont le code HTML est sorti dans la classe de table de liste. Un scénario beaucoup plus complexe, mais la façon dont vous accédez aux ID est la même.
Nate Dudek