我正在使用the Custom List Table Example plugin 作为创建自己的自定义列表表的基础。一切都很好,除了一个棘手的问题。
当我通过process_bulk_action()
方法,我想使用wp_redirect()
. 以下是一个示例:
function process_bulk_action() {
// Some security check code here
// Get the bulk action
$action = $this->current_action();
if ($action == \'bulk_trash\') {
// Code for the "delete process"
// Assuming "delete process" is successful
wp_redirect("http://url/path.php?update=1&message=some_message");
exit;
}
}
请注意,在通话中
wp_redirect("http://url/path.php?update=1&message=some_message")
, 我试图重定向到显示列表表的同一页面,以便用垃圾处理的结果重新加载列表。还请注意
message
在允许我向用户显示有关批量操作结果的通知的路径中。
问题是,我收到一条错误消息Cannot modify header information - headers already sent by <file path>
.
我理解消息的含义,以及背后的原因(页面已加载,无法重定向)。但是,如果我想在处理批量操作后重定向,那么如何重定向?如果重定向不是正确的解决方案,我还有哪些其他选项允许我重新加载自定义wp_list_table
是否再次使列出的记录反映被删除的项目(即,发布的项目较少,而垃圾箱中的项目较多)?
谢谢
SO网友:sorabh86
了解层次结构,您不需要重定向,因为表单正在同一页面上发布值。
function process_bulk_action() {
// Some security check code here
// Get the bulk action
$action = $this->current_action();
if ($action == \'bulk_trash\') {
// Code for the "delete process"
$delete_ids = esc_sql($_POST[\'bulk-delete\']);
//loop over the array of record ids
foreach($delete_ids as $id) {
self::delete_item($id);
}
// show admin notice
echo \'<div class="notice notice-success is-dismissible"><p>Bulk Deleted..</p></div>\';
}
}
另一种方法是prepare\\u items
public function prepare_items() {
// first check for action
$this->process_bulk_action();
// then code to render your view.
}