Como as ações em massa são tratadas nas classes da tabela de lista personalizada?


9

Estou trabalhando em uma tabela de dados personalizada para exibição no painel do WordPress. A tabela é preenchida a partir de uma tabela de banco de dados que eu construí em um plug-in.

Eu tenho usado o exemplo fornecido da Tabela de lista personalizada do WordPress para a maioria das minhas perguntas de codificação nesta área, mas o exemplo não tem nada para lidar com ações em massa. Aqui está o link para o exemplo documentado: http://wordpress.org/extend/plugins/custom-list-table-example/

Para processar as ações em massa, o exemplo fornece apenas isso:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Quero saber como extrair os itens selecionados para a ação para que eu possa excluí-los ou editar suas entradas do banco de dados de acordo.

Respostas:


11

Supondo que você esteja usando a função column_cb () padrão, a tabela de lista passará os IDs das linhas selecionadas em uma matriz em $ _GET, rotulados como o que você atribuiu a 'singular' no construtor da tabela de lista.

Aqui está um column_cb () típico:

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

Por exemplo, digamos que eu tenha uma tabela de lista que exibe vídeos. O construtor ficaria assim:

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

    }

Portanto, se você marcar três linhas na tabela de lista, selecionar "Excluir" na lista de ações em massa e clicar em Aplicar, poderá acessar as linhas selecionadas usando $ _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);
            }
        }

    }

Obrigado! Alguma idéia de como implementar uma ação em massa "editar" que funciona da mesma maneira que outras tabelas do WordPress?
— Chiubaka

Você poderia lidar com isso de maneira semelhante, exceto que a interface do usuário seria muito mais envolvida. Provavelmente eu não usaria o método process_bulk_actions () padrão em um caso como esse, porque a interface mais utilizável provavelmente seria aquela que altera as linhas da grade para campos editáveis. Nesse caso, você ainda obtém os itens selecionados na matriz $ _GET, mas precisaria substituir a maneira como o HTML é gerado na classe da tabela de lista. Um cenário muito mais complexo, mas a maneira como você acessa os IDs é a mesma.
— Nate Dudek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.