1

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();


}

?>
3
  • Which page are you adding these actions on? Commented Aug 2, 2012 at 5:13
  • wait i will put the whole code to make it more understandable
    – Seeker
    Commented Aug 2, 2012 at 5:14
  • I need to delete multiple selected in admin page.
    – user66754
    Commented Jan 29, 2015 at 11:55

1 Answer 1

2

Maybe this tutorial at wpengineer will help:

WP_List_Table – a step by step guide: Bulk actions

1
  • Hi Latz - welcome to WPSE :) (na endlich!). Link only questions are flagged by the "community user bot". Please add a quote, as suggested here, or - even better - add a short explanation or summary or even some small example. Thanks.
    – kaiser
    Commented Aug 2, 2012 at 13:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.