การดำเนินการเป็นกลุ่มได้รับการจัดการในคลาสตารางรายการแบบกำหนดเองได้อย่างไร


9

ฉันกำลังทำงานบนตารางข้อมูลที่กำหนดเองเพื่อแสดงในแผงควบคุม WordPress ตารางเติมข้อมูลจากตารางฐานข้อมูลที่ฉันสร้างขึ้นในปลั๊กอิน

ฉันใช้ตัวอย่างตาราง WordPress Custom List ที่ให้ไว้สำหรับคำถามการเข้ารหัสของฉันส่วนใหญ่ในพื้นที่นี้ แต่ตัวอย่างไม่มีอะไรสำหรับการจัดการการกระทำเป็นกลุ่ม นี่คือลิงค์สำหรับตัวอย่างเอกสาร: http://wordpress.org/extend/plugins/custom-list-table-example/

สำหรับการประมวลผลการดำเนินการเป็นกลุ่มตัวอย่างให้สิ่งนี้เท่านั้น:

    function process_bulk_action() {

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

        wp_die('Items deleted!');
    }

}

ฉันต้องการทราบวิธีดึงรายการที่เลือกไว้สำหรับการดำเนินการเพื่อให้ฉันสามารถลบหรือแก้ไขรายการฐานข้อมูลได้

คำตอบ:


11

สมมติว่าคุณกำลังใช้ฟังก์ชัน column_cb () มาตรฐานตารางรายการจะผ่านรหัสของแถวที่เลือกในอาร์เรย์ใน $ _GET ซึ่งระบุว่าเป็นสิ่งที่คุณมอบหมายให้ 'เอกพจน์' ในตัวสร้างของตารางรายการ

นี่คือ column_cb ทั่วไป ():

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

ตัวอย่างเช่นสมมติว่าฉันมีตารางรายการที่แสดงวิดีโอ ตัวสร้างจะมีลักษณะ:

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

    }

ดังนั้นหากคุณตรวจสอบสามแถวในตารางรายการให้เลือก "ลบ" จากรายการการกระทำเป็นกลุ่มและกดใช้คุณสามารถเข้าถึงแถวที่เลือกโดยใช้ $ _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);
            }
        }

    }

ขอบคุณ! ความคิดเห็นใด ๆ เกี่ยวกับวิธีการใช้การกระทำเป็นกลุ่ม "แก้ไข" ที่ทำงานเช่นเดียวกับตาราง WordPress อื่น ๆ ?
Chiubaka

คุณสามารถจัดการกับมันในลักษณะที่คล้ายกันยกเว้น UI จะเกี่ยวข้องมากขึ้น ฉันอาจจะไม่ใช้เมธอด process_bulk_actions () เริ่มต้นในกรณีเช่นนี้เนื่องจากอินเทอร์เฟซที่ใช้งานได้ดีที่สุดน่าจะเป็นอินเทอร์เฟซที่เปลี่ยนแถวกริดเป็นฟิลด์ที่แก้ไขได้ ในกรณีนี้คุณยังคงได้รับรายการที่เลือกในอาร์เรย์ $ _GET แต่คุณจะต้องแทนที่วิธีที่ HTML ได้รับผลลัพธ์ในคลาสตารางรายการ มีความซับซ้อนมากขึ้นของสถานการณ์ แต่วิธีที่คุณเข้าถึง ID นั้นเหมือนกัน
Nate Dudek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.