自定义列表表类中的批量操作如何处理?


9

我正在处理要在WordPress仪表板中显示的自定义数据表。该表从我在插件中内置的数据库表填充。

我在此区域中的大多数编码问题都使用了提供的WordPress Custom List Table示例,但是该示例没有任何用于处理批量操作的内容。这是记录的示例的链接: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!');
    }

}

我想知道如何提取为操作选择的项目,以便我可以删除它们或相应地编辑其数据库条目。

Answers:


11

假设您使用的是标准column_cb()函数,列表表将在$ _GET数组中传递选定行的ID,标记为您在列表表的构造函数中分配给“单数”的内容。

这是一个典型的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表相同的“编辑”批量操作的任何想法?
2011年

您可以用类似的方式来处理它,只是UI会涉及更多。在这种情况下,我可能不会使用默认的process_bulk_actions()方法,因为最可用的接口可能是将网格行更改为可编辑字段的接口。在那种情况下,您仍然会在$ _GET数组中获得选定的项目,但是您必须重写列表表类中HTML的输出方式。场景要复杂得多,但是访问ID的方式是相同的。
内特·迪德克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.