Skip to content

Instantly share code, notes, and snippets.

@andtrev
Created May 18, 2017 18:13

Revisions

  1. andtrev created this gist May 18, 2017.
    127 changes: 127 additions & 0 deletions wp_list_table_bulk_delete_example.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,127 @@
    function admin_menu_add() {

    $hook_suffix = add_menu_page(
    __( 'Bulk Deleter', 'bulk-delete-example' ),
    __( 'Bull Deleters', 'bulk-delete-example' ),
    'administrator',
    'bulk-delete-example',
    'bulk_delete_admin_page'
    );

    add_action( "load-{$hook_suffix}", 'admin_delete_action' );

    }
    add_action( 'admin_menu', 'admin_menu_add' );

    function bulk_delete_admin_page() {

    if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {

    wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce', 'action', 'action2', 'paged' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
    exit;

    }

    if ( isset( $_GET['deleted'] ) && 'success' === $_GET['deleted'] ) {

    echo '<div class="notice notice-success is-dismissible"><p>' . __( 'Successfully deleted.', 'bulk-delete-example' ) . '</p></div>';

    }

    if ( isset( $_GET['deleted'] ) && 'error' === $_GET['deleted'] ) {

    echo '<div class="notice notice-error is-dismissible"><p>' . __( 'Error deleting.', 'bulk-delete-example' ) . '</p></div>';

    }

    $_SERVER['REQUEST_URI'] = remove_query_arg( array( 'updated', 'deleted', '_wpnonce', '_wp_http_referer' ), $_SERVER['REQUEST_URI'] );

    ?>
    <form method="get">
    <input type="hidden" name="page" value="bulk-delete-example">
    <?php
    $list_table = new Bulk_Delete_Admin_List();
    $list_table->prepare_items();
    $list_table->display();
    ?>
    </form>
    <?php

    }

    function admin_delete_action() {

    if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'bulk-' . sanitize_key( 'bulk-delete' ) ) ) {

    if ( ( isset( $_GET['action'] ) && 'bulk-delete' === $_GET['action'] ) ||
    ( isset( $_GET['action2'] ) && 'bulk-delete' === $_GET['action2'] ) ) {

    if ( empty( $_GET['bulk-item-selection'] ) ) {

    return;

    }

    $delete_error = delete_the_things();

    $sendback = remove_query_arg( array( 'action', 'action2', '_wpnonce', '_wp_http_referer', 'bulk-item-selection', 'delete_id', 'updated' ), wp_get_referer() );

    if ( false === $delete_error ) {

    $sendback = add_query_arg( 'deleted', 'error', $sendback );

    } else {

    $sendback = add_query_arg( 'deleted', 'success', $sendback );

    }

    wp_redirect( $sendback );
    exit();

    }
    }
    }

    class Bulk_Delete_Admin_List extends WP_List_Table {

    public function __construct() {

    parent::__construct( array(
    'singular' => 'bulk-delete',
    'plural' => 'bulk-deletes',
    'ajax' => false
    ) );

    }

    public function get_columns() {

    return array(
    'cb' => '<input type="checkbox" />',
    );

    }

    public function column_cb( $item ) {

    return sprintf( '<input type="checkbox" class="bulk-item-selection" name="bulk-item-selection[]" value="%s" />', $item['id'] );

    }

    public function get_bulk_actions() {

    return array(
    'bulk-delete' => __( 'Delete', 'bulk-delete-example' ),
    );

    }

    public function prepare_items() {

    $this->items[] = array(
    'id' => get_the_item_id(),
    );

    }
    }