wp_list_tables acciones masivas

2

Cómo activar acciones masivas dentro de una tabla WP_List_Table extendida.

He estado agregando las siguientes acciones masivas al cuadro de selección de la tabla de mayo, pero en Aplicar realmente no sucederá nada

aquí es cómo agregué mis acciones masivas

function get_bulk_actions() {
  $actions = array(

        'delete'    => 'Delete',

        'parsing'    => 'Parsen'
  );

  return $actions;
}

y aquí está la columna de la casilla de verificación

function column_cb($item) {

    return sprintf(

            '<input type="checkbox" name="record[]" value="%d" />', $item['Round']
        );    

}
    
pregunta fefe 17.12.2012 - 14:38

2 respuestas

5

Si agrega una acción masiva, entonces tiene que reaccionar ante esta acción. Simplemente agregar una función no hace nada, hay que llamarla:

class WPSE_List_Table extends WP_List_Table
{
    public function __construct() {

        parent::__construct(
            array(
                'singular' => 'singular_form',
                'plural'   => 'plural_form',
                'ajax'     => false
            )
        );

    }

    public function prepare_items() {

        $columns  = $this->get_columns();
        $sortable = $this->get_sortable_columns();
        $hidden   = array( 'id' );

        $this->_column_headers = array( $columns, $hidden, $sortable );

        $this->process_bulk_action();

    }

    public function get_columns() {

        return array(
            'cb'    => '<input type="checkbox" />', // this is all you need for the bulk-action checkbox
            'id'    => 'ID',
            'date'  => __( 'Date', 'your-textdomain' ),
            'title' => __( 'Title', 'your-textdomain' ),
        );

    }

    public function get_sortable_columns() {

        return array(
            'date'  => array( 'date', false ),
            'title' => array( 'title', false ),
        );

    }

    public function get_bulk_actions() {

        return array(
                'delete' => __( 'Delete', 'your-textdomain' ),
                'save'   => __( 'Save', 'your-textdomain' ),
        );

    }

    public function process_bulk_action() {

        // security check!
        if ( isset( $_POST['_wpnonce'] ) && ! empty( $_POST['_wpnonce'] ) ) {

            $nonce  = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
            $action = 'bulk-' . $this->_args['plural'];

            if ( ! wp_verify_nonce( $nonce, $action ) )
                wp_die( 'Nope! Security check failed!' );

        }

        $action = $this->current_action();

        switch ( $action ) {

            case 'delete':
                wp_die( 'Delete something' );
                break;

            case 'save':
                wp_die( 'Save something' );
                break;

            default:
                // do nothing or something else
                return;
                break;
        }

        return;
    }

}

En prepare_items() llamamos process_bulk_action() . Así que en tu página de fondo tendrás algo como esto:

$table = new WPSE_List_Table();

printf( '<div class="wrap" id="wpse-list-table"><h2>%s</h2>', __( 'Your List Table', 'your-textdomain' ) );

echo '<form id="wpse-list-table-form" method="post">';

$page  = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRIPPED );
$paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );

printf( '<input type="hidden" name="page" value="%s" />', $page );
printf( '<input type="hidden" name="paged" value="%d" />', $paged );

$table->prepare_items(); // this will prepare the items AND process the bulk actions
$table->display();

echo '</form>';

echo '</div>';

Al principio creas una instancia de tu clase de tabla de lista. Luego creas un formulario y llamas a prepare_items() . Con esta llamada, las acciones masivas se procesarán porque llamamos al método process_bulk_action() dentro de prepare_items() .

En el ejemplo anterior, usamos post como método para enviar los datos. Así que podemos capturar la acción masiva de la matriz de publicaciones si no quisiéramos procesar las acciones masivas dentro de la clase (o por otras razones).

// this is the top bulk action!!
$action = ( isset( $_POST['action'] ) ) ?
    filter_input( INPUT_POST, 'action', FILTER_SANITIZE_STRIPPED ) : 'default_top_bulk_action';

// this is the bottom bulk action!!
$action2 = ( isset( $_POST['action2'] ) ) ? 
    filter_input( INPUT_POST, 'action2', FILTER_SANITIZE_STRIPPED ) : 'default_bottom_bulk_action';

switch ( $action ) {}
switch ( $action2 ) {}

Puede capturar la acción masiva en cualquier lugar que desee de la matriz post / get (dependiendo del método utilizado para enviar los datos).

    
respondido por el Ralf912 05.04.2013 - 00:03
0

Esto es lo que he encontrado en varios sitios web. Todavía no me funciona, pero solía funcionar cuando todavía tenía los datos de muestra en mi tabla de lista personalizada.

  function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {
        wp_die('Items deleted (or they would be if we had items to delete)!');
    }

}
    
respondido por el Jan 06.01.2013 - 11:59

Lea otras preguntas en las etiquetas