¿Cómo se manejan las acciones masivas en clases de tablas de listas personalizadas?

9

Estoy trabajando en una tabla de datos personalizada para mostrar en el panel de WordPress. La tabla se completa desde una tabla de base de datos que incorporé en un complemento.

He estado usando el ejemplo proporcionado de la tabla de listas personalizadas de WordPress para la mayoría de mis preguntas de codificación en esta área, pero el ejemplo no tiene nada para manejar acciones masivas. Aquí está el enlace para el ejemplo documentado: enlace

Para procesar las acciones masivas, el ejemplo solo proporciona esto:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

Quiero saber cómo extraer los elementos seleccionados para la acción para poder eliminarlos o editar sus entradas de base de datos en consecuencia.

    
pregunta Chiubaka 03.08.2011 - 22:10

1 respuesta

10

Suponiendo que estás usando la función column_cb () estándar, la tabla de la lista pasará los ID de las filas seleccionadas en una matriz en $ _GET, etiquetada como lo que hayas asignado como "singular" en el constructor de la tabla de la lista.

Aquí hay un 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 ejemplo, digamos que tengo una tabla de lista que muestra videos. El constructor se vería así:

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

    }

Por lo tanto, si marca tres filas en la tabla de la lista, selecciona "Eliminar" de la lista de acciones en masa y presiona aplicar, puedes acceder a las filas seleccionadas 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);
            }
        }

    }
    
respondido por el Nate Dudek 22.08.2011 - 03:38

Lea otras preguntas en las etiquetas