wp_list_table Bulk Actions Example

Congrats, You are Subscribed to Receive Updates.

wp_list_table Bulk Actions Example

Before I am getting into the topic, Here I will give you the source code which i worked previously. This is for your reference and example.

Plugin Name: Wp_list_table_Edit by Kv Varadha
Plugin URI: https://kvcodes.com	
Description: A Simple Way to make your Plugin from Pluginpress. i.e Create your custom plugin from WordPress Admin itself. No need of much coding. 
Version: 1.0
Author: Kv Varadha 
Author URI: https://plus.google.com/u/0/b/103705444781603570835/
define('KV_PLUGIN_URL', plugin_dir_url( __FILE__ ));

*  admin menu creation for pluginpress 
function kv_pluginpress_menu(){ 
	add_menu_page('PluginPress', 'PluginPress', 'manage_options', 'pluginpress' , 'kvcodes_edit_plugins', KV_PLUGIN_URL.'/images/kv_logo.png', 66);
	add_submenu_page( 'pluginpress', 'Create New ', 'Create New', 'manage_options', 'kvcodes', 'kvcodes_edit_plugin' );	
	//add_action("load-{$settings_page}", 'kv_load_settings_page');
} add_action('admin_menu', 'kv_pluginpress_menu');

    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
class KV_PluginPress extends WP_List_Table {  

    function __construct(){
        global $status, $page;
        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'plugin',     //singular name of the listed records
            'plural'    => 'plugins',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );        
	function extra_tablenav( $which ) {
		if ( $which == "top" ){		
			echo" Your Plugins List created by using  Pluginpress  ";

    function column_default($item, $column_name){
            case 'description':
            case 'author':
			case 'name' :
			case 'version' : 
                return $item[$column_name];
                return print_r($item,true); //Show the whole array for troubleshooting purposes
	 function get_columns(){
        $columns = array(
            'cb'        => '<input type="checkbox" />', //Render a checkbox instead of text
            'name'     => 'Name',
            'description'    => 'Description ',
			'version' => 'Version',
            'author'  => 'Author'
        return $columns;

    function get_sortable_columns() {
        $sortable_columns = array(
            'name'     => array('name',false),     //true means it's already sorted
            'description'    => array('description',false),
            'author'  => array('author',false)
        return $sortable_columns;

    function column_name($item){       
        $actions = array(
            'edit'      => sprintf('<a href="?page=%s&action=%s&plugin=%s">Edit</a>','kvcodes','edit',$item['ID']),
            'delete'    => sprintf('<a href="?page=%s&action=%s&plugin=%s">Delete</a>','kvcodes','delete',$item['ID']),
        return sprintf('%1$s <span style="color:silver ; display : none;">(id:%2$s)</span>%3$s',
            /*$1%s*/ $item['name'],
            /*$2%s*/ $item['ID'],
            /*$3%s*/ $this->row_actions($actions)

    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 ("plugin")
            /*$2%s*/ $item['ID']                //The value of the checkbox should be the record's id
    function get_bulk_actions() {
        $actions = array(
            'delete'    => 'Delete'
        return $actions;

    function process_bulk_action() {        
        if( 'delete'===$this->current_action() ) {
          //  wp_die('Items deleted (or they would be if we had items to delete)!');
           foreach($_GET['id'] as $id) {
                //$id will be a string containing the ID of the video
                //i.e. $id = "123";                

    function prepare_items() {
        global $wpdb; 
		$pluginpress_db= $wpdb->prefix.'kv_pluginpress' ;    
        $kv_query = "SELECT * FROM $pluginpress_db ";
        $per_page = 5;
        $columns = $this->get_columns();
        $hidden = array();
        $sortable = $this->get_sortable_columns();
		$this->_column_headers = array($columns, $hidden, $sortable);       
        $data = $wpdb->get_results($kv_query, ARRAY_A);
        function usort_reorder($a,$b){
            $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'ID'; //If no sort, default to name
            $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'dsc'; //If no order, default to asc
            $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order
            return ($order==='asc') ? $result : -$result; //Send final sort direction to usort
        usort($data, 'usort_reorder');        
        $current_page = $this->get_pagenum();       
        $total_items = count($data);  
        $data = array_slice($data,(($current_page-1)*$per_page),$per_page);        
        $this->items = $data;        
        $this->set_pagination_args( array(
            'total_items' => $total_items,                  //WE have to calculate the total number of items
            'per_page'    => $per_page,                     //WE have to determine how many items to show on a page
            'total_pages' => ceil($total_items/$per_page)   //WE have to calculate the total number of pages
        ) );

function kvcodes_edit_plugins(){  
	if(isset($_GET['action'] ) && $_GET['action'] == 'edit' &&  isset($_GET['plugin']) && $_GET['plugin']  != null ){  
		$id = $_GET['plugin'] ; 
	} else if(isset($_GET['action'] ) && $_GET['action'] == 'delete' &&  isset($_GET['plugin']) && $_GET['plugin']  != null ){  
		$id = $_GET['plugin'] ; 
	} else { 
		$PluginPress = new KV_PluginPress();
		$PluginPress->prepare_items();       ?>
		<div class="wrap">        
			<div id="icon-users" class="icon32"><br/></div>
			<h2>PluginPress <a href="<?php echo admin_url('admin.php?page=kvcodes');  ?>" class="add-new-h2">Add New</a></h2> 
			<form id="plugins-filter" method="get">        
				<input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" />          
				<?php $PluginPress->display() ?>

function kv_edit_selected_plugin($id) {
	// Edit function goes here.

funciton kv_delete_selected_plugin($id) {
	// Delete function goes here.	

The above one is the complete code to create row actions. This is one of my convenient way to use use row actions.  Here my db name is

” wp_kv_pluginpress. ” here i listed all the plugins. this is just for understanding.  and “kvcodes_edit_plugins” is the main function to create object and perform row actions too.


About Varadharaj V

The founder of Kvcodes, Varadharaj V is an ERP Analyst and a Web developer specializing in WordPress(WP), WP Theme development, WP Plugin development, Frontaccounting(FA), Sales, Purchases, Inventory, Ledgers, Payroll & HRM, CRM, FA Core Customization, OpenCart Theme Development, PHP, HTML, CSS, jQuery, Bootstrap development and content SEO.

One comment

Comment Below

Your email address will not be published. Required fields are marked *


Current ye@r *



Subscribe E-mail Updates

Congrats, You are Subscribed to Receive Updates.


Category Posts