how to make custom bulk actions for a WP_List_Table (core class)

I am using the WP_List_Table class and I added the links for the actions like this:

function get_bulk_actions() {
        $actions = array();

        $actions['approv'] ='<a href="#">'.__( 'Approve' ).'</a>';
                $actions['reject'] = '<a href="#">'.__( 'Reject' ).'</a>';
                $actions['delete'] = '<a href="#">'.__( 'Delete' ).'</a>';
                $actions['view'] = '<a href="#">'.__( 'View' ).'</a>';


        return $actions;
    }

Then I display them in the display_row() function like this:

Read More
$actions = $this->get_bulk_actions();
echo $this->row_actions( $actions );

Now I am wondering how to add custom actions to those links I created. Is there anyway where I can send the variables to a page? To do the DB handling of these links and repopulate the WP_List_Table that was created before i performed action.

UPDATE 1

Here is the Full Code for the WP_List_Table Class:

<?php
// Our class extends the WP_List_Table class, so we need to make sure that it's there
if( ! class_exists( 'WP_List_Table' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}
class Link_List_Table extends WP_List_Table {

    /**
     * Constructor, we override the parent to pass our own arguments
     * We usually focus on three parameters: singular and plural labels, as well as whether the class supports AJAX.
     */
     function __construct() {
         parent::__construct( array(
        'singular'=> 'wp_list_text_link', //Singular label
        'plural' => 'wp_list_test_links', //plural label, also this well be one of the table css class
        'ajax'  => true //We won't support Ajax for this table
        ) );
     }
/**
 * Define the columns that are going to be used in the table
 * @return array $columns, the array of columns to use with the table
 */
function get_columns() {
    return $columns= array(
        'col_person_name' => 'Name',
                'col_business_name' => 'Bussiness Name' ,
                'col_person_email' => 'Email' , 
                'col_pserson_phone' => 'Contact Number',
                'col_request_status' => 'Status',
                'col_is_deleted' => 'Deleted'
    );
}

/**
 * Prepare the table with different parameters, pagination, columns and table elements
 */
function prepare_items() {
    global $wpdb, $_wp_column_headers;
    $screen = get_current_screen();

    /* -- Preparing your query -- */
        $query = "SELECT * FROM approval_requests";

    /* -- Ordering parameters -- */
        //Parameters that are going to be used to order the result
        $orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'ASC';
        $order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : '';
        if(!empty($orderby) & !empty($order)){ $query.=' ORDER BY '.$orderby.' '.$order; }

    /* -- Pagination parameters -- */
        //Number of elements in your table?
        $totalitems = $wpdb->query($query); //return the total number of affected rows
        //How many to display per page?
        $perpage = 20;
        //Which page is this?
        $paged = !empty($_GET["paged"]) ? mysql_real_escape_string($_GET["paged"]) : '';
        //Page Number
        if(empty($paged) || !is_numeric($paged) || $paged<=0 ){ $paged=1; }
        //How many pages do we have in total?
        $totalpages = ceil($totalitems/$perpage);
        //adjust the query to take pagination into account
        if(!empty($paged) && !empty($perpage)){
            $offset=($paged-1)*$perpage;
            $query.=' LIMIT '.(int)$offset.','.(int)$perpage;
        }

    /* -- Register the pagination -- */
        $this->set_pagination_args( array(
            "total_items" => $totalitems,
            "total_pages" => $totalpages,
            "per_page" => $perpage,
        ) );
        //The pagination links are automatically built according to those parameters

    /* -- Register the Columns -- */
        $columns = $this->get_columns();
                $hidden = array();
                $sortable = array();
                $this->_column_headers = array($columns, $hidden, $sortable);
    /* -- Fetch the items -- */
        $this->items = $wpdb->get_results($query);
}


/**
 * Display the rows of records in the table
 * @return string, echo the markup of the rows
 */


function display_rows() {

    //Get the records registered in the prepare_items method
    $records = $this->items;
          list( $columns, $hidden ) = $this->get_column_info();

          //print_r($records);
    //Loop for each record
    if(!empty($records)){foreach($records as $rec){

        //Open the line
        echo '<tr id="record_'.$rec->sr_no.'">';
        foreach ( $columns as $column_name => $column_display_name ) {

            //Style attributes for each col
            $class = "class='$column_name column-$column_name'";
            $style = "";
            if ( in_array( $column_name, $hidden ) ) $style = ' style="display:none;"';
            $attributes = $class . $style;

            //edit link



            //Display the cell
            switch ( $column_name ) {
                case "col_person_name": 
                                    echo '<td '.$attributes.'>'.stripslashes($rec->person_name);
                                       $actions = $this->get_bulk_actions();

                    echo $this->row_actions( $actions );
                                     echo '</td>'; 
                                break;
                case "col_business_name": echo '<td '.$attributes.'>'.stripslashes($rec->business_name).'</td>'; break;
                case "col_person_email": echo '<td '.$attributes.'>'.$rec->person_email.'</td>'; break;
                case "col_pserson_phone": echo '<td '.$attributes.'>'.$rec->pserson_phone.'</td>'; break;
                                case "col_request_status": echo '<td '.$attributes.'>'.$rec->request_status.'</td>'; break;
                case "col_is_deleted": echo '<td '.$attributes.'>'.$rec->is_deleted.'</td>'; break;
            }
        }

        //Close the line
        echo'</tr>';
    }}
}

function get_bulk_actions() {
        $actions = array();

        $actions['approv'] ='<a href="#">'.__( 'Approve' ).'</a>';
                $actions['reject'] = '<a href="#">'.__( 'Reject' ).'</a>';
                $actions['delete'] = '<a href="#">'.__( 'Delete' ).'</a>';
                $actions['view'] = '<a href="#">'.__( 'View' ).'</a>';


        return $actions;
    }



}

function show_table(){

$wp_list_table = new Link_List_Table();
$wp_list_table->prepare_items();

//Table of elements
$wp_list_table->display();


}

?>

Related posts

Leave a Reply

1 comment