Làm thế nào là hành động hàng loạt được xử lý trong các lớp bảng danh sách tùy chỉnh?


9

Tôi đang làm việc trên một bảng dữ liệu tùy chỉnh để hiển thị trong bảng điều khiển WordPress. Bảng được điền từ bảng cơ sở dữ liệu mà tôi đã xây dựng trong một plugin.

Tôi đã sử dụng ví dụ Bảng danh sách tùy chỉnh WordPress được cung cấp cho hầu hết các câu hỏi mã hóa của mình trong lĩnh vực này, nhưng ví dụ này không có gì để xử lý các hành động hàng loạt. Đây là liên kết cho ví dụ được ghi lại: http://wordpress.org/extend/plugins/custom-list-table-example/

Để xử lý các hành động hàng loạt, ví dụ chỉ cung cấp điều này:

    function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {

        wp_die('Items deleted!');
    }

}

Tôi muốn biết làm thế nào để kéo các mục được chọn cho hành động để tôi có thể xóa chúng hoặc chỉnh sửa các mục cơ sở dữ liệu của chúng cho phù hợp.

Câu trả lời:


11

Giả sử bạn đang sử dụng hàm cột_cb () tiêu chuẩn, bảng danh sách sẽ chuyển ID của các hàng đã chọn trong một mảng bằng $ _GET, được gắn nhãn là bất cứ thứ gì bạn gán cho 'số ít' trong hàm tạo của bảng danh sách.

Đây là một cột_cb () điển hình:

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 ("video")
            /*$2%s*/ $item->id             //The value of the checkbox should be the record's id
        );
    }

Ví dụ: giả sử tôi có bảng danh sách hiển thị video. Hàm tạo sẽ trông như sau:

function __construct(){
        global $status, $page;

        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'video',     //singular name of the listed records
            'plural'    => 'videos',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );

    }

Vì vậy, nếu bạn kiểm tra ba hàng trong bảng danh sách, chọn "Xóa" khỏi danh sách hành động hàng loạt và nhấn áp dụng, bạn có thể truy cập các hàng đã chọn bằng cách sử dụng $ _GET ['video'].

function process_bulk_action() {

        //Detect when a bulk action is being triggered...
        if( 'delete'===$this->current_action() ) {
            foreach($_GET['video'] as $video) {
                //$video will be a string containing the ID of the video
                //i.e. $video = "123";
                //so you can process the id however you need to.
                delete_this_video($video);
            }
        }

    }

Cảm ơn! Bạn có ý tưởng nào về cách thực hiện một hành động hàng loạt "chỉnh sửa" hoạt động giống như các bảng WordPress khác không?
Chiubaka

Bạn có thể xử lý nó theo cách tương tự, ngoại trừ UI sẽ liên quan nhiều hơn. Tôi có thể sẽ không sử dụng phương thức process_bulk_ilities () mặc định trong trường hợp như thế này, bởi vì giao diện dễ sử dụng nhất có thể là một giao diện thay đổi các hàng lưới thành các trường có thể chỉnh sửa. Trong trường hợp đó, bạn vẫn nhận được các mục đã chọn trong mảng $ _GET, nhưng bạn phải ghi đè lên cách HTML được xuất ra trong lớp bảng danh sách. Một kịch bản phức tạp hơn nhiều, nhưng cách bạn truy cập ID là như nhau.
Nate Dudek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.