web-dev-qa-db-ja.com

wP_List_Tableのカスタム一括アクションの作成方法(コアクラス)

私はWP_List_Tableクラスを使用しています、そして私はこのような行動へのリンクを加えました:

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;
    }

それから私はこのようにdisplay_row()関数でそれらを表示します:

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

今私は作成したそれらのリンクにカスタムアクションを追加する方法を疑問に思っています。変数をページに送信できる場所はありますか。これらのリンクのDB処理を行い、私がアクションを実行する前に作成されたWP_List_Tableを再作成するため。

アップデート1

これがWP_List_Tableクラスのフルコードです。

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


}

?>
1
Seeker

多分wpengineerでのこのチュートリアルは役に立つでしょう:

WP_List_Table - ステップバイステップガイド:一括操作

2
Latz