问题描述
我正在使用自定义数据表在 WordPress 仪表板中显示。该表填充了我内置的一个插件的数据库表。
我一直在使用提供的 WordPress 自定义列表表示例来解决我在这方面的大部分编码问题,但该示例没有任何处理大量操作的东西。以下是文档示例的链接: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!');
}
}
我想知道如何拉动选择的项目,以便我可以删除它们或相应地编辑他们的数据库条目。
最佳解决方案
假设您正在使用 standard column_cb() 函数,则列表将在 $ _GET 中的数组中传递所选行的 ID,标记为在列表表的构造函数中分配给’singular’ 的任何行。
这是一个典型的 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?
) );
}
因此,如果您在列表表中检查三行,请从批量操作列表中选择”Delete”,然后点击 「应用」,您可以使用 $ _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);
}
}
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。