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:
$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();
}
?>
Maybe this tutorial at wpengineer will help:
WP_List_Table â a step by step guide: Bulk actions