我试图通过创建一个扩展类来使用wp_list_table。在提供的批量更新功能上,我有两个操作要运行。然而,我不太知道如何编写正确的case switch语句来设置结果复选框以根据所采取的操作应用于任何一个数组操作...(请参见我知道我需要做什么,但我不太知道如何做)。
这是我必须使用的最小的相关代码:
/**
* Render the bulk edit checkbox
*
* @param array $item
*
* @return string
*/
function column_cb( $item ) {
return sprintf(
'<input type="checkbox" name="bulk-reset[]" value="%s" />', $item['id']
);
}
/**
* Method for name column
*
* @param array $item an array of DB data
*
* @return string
*/
function column_name( $item ) {
$delete_nonce = wp_create_nonce( 'sp_delete_customer' );
$reset_nonce = wp_create_nonce( 'sp_reset_payouts' );
$title = '<strong>' . $item['name'] . '</strong>';
$actions = [
'delete' => sprintf( '<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Delete</a>', esc_attr( $_REQUEST['page'] ), 'delete', absint( $item['id'] ), $delete_nonce ),
'reset' => sprintf( '<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Reset</a>', esc_attr( $_REQUEST['page'] ), 'reset', absint( $item['id'] ), $reset_nonce )
];
return $title . $this->row_actions( $actions );
}
/**
* Returns an associative array containing the bulk action
*
* @return array
*/
public function get_bulk_actions() {
$actions = array(
'bulk-delete' => 'Delete',
'bulk-reset' => 'Reset'
);
return $actions;
}回顾一下这最后一次,我认为我需要一个在name属性上作为转义php回显调用的函数,对吗?然后该函数应该返回基于$_post['delete-*']的bulk-reset[]或bulk-delete[],对吧?
经过深思熟虑后,我试着将解决方案组合在一起,但无论出于什么原因,我创建的action_type函数都没有被调用:
/**
* Render the bulk edit checkbox
*
* @param array $item
*
* @return string
*/
function column_cb( $item ) {
global $action_type;
return sprintf(
'<input type="checkbox" name="'.$action_type.'" value="%s" />', $item['id']
);
}
/**
* Pick the Checkbox Value based on post Value
*
*
* @return string
*
*/
public function action_type() {
if ( ( isset( $_POST['action'] ) && $_POST['action'] == 'bulk-delete' )
|| ( isset( $_POST['action2'] ) && $_POST['action2'] == 'bulk-delete' )
) {
$output = "bulk-delete[]";
} else {
$output = "bulk-reset[]";
}
return $output;
}编辑2:意识到这不会起作用,因为这设置了post值,而我需要在页面加载之前设置它……我猜这意味着我需要让数组名称是通用的,post操作处理如何处理数据……也许为了简单起见,我应该将编辑操作设置为与其最终相同的复选框集相同的批量删除数据集。
编辑3:我不能做我在edit2结尾处建议的事情,因为运行操作的代码部分取决于帖子的数组名称,而该数组名称是在页面加载时设置的。我不知道该怎么办。
发布于 2016-05-20 19:15:49
在“类My_Example_List_Table扩展WP_List_Table”类中尝试这三个函数,并根据需要进行修改
function column_id($item){
$actions = array(
/* 'edit' => sprintf('<a href="?page=%s&action=%s&book=%s">Edit</a>',$_REQUEST['page'],'edit',$item['ID']),*/
'delete' => sprintf('<a href="?page=%s&action=%s&id=%s">Delete</a>',$_REQUEST['page'],'delete',$item['id']),
);
return sprintf('%1$s %2$s', $item['id'], $this->row_actions($actions) );
}
function get_bulk_actions() {
$actions = array(
'delete' => 'Delete'
);
return $actions;
}
function process_bulk_action(){
global $wpdb;
$table_name = $wpdb->prefix."tablename";
if ('delete' === $this->current_action()) {
$ids = isset($_REQUEST['id']) ? $_REQUEST['id'] : array();
if (is_array($ids)) $ids = implode(',', $ids);
if (!empty($ids)) {
$wpdb->query("DELETE FROM $table_name WHERE id IN($ids)");
}
}
}发布于 2016-05-20 21:16:43
下面是我如何解决这个问题的:
myCheckboxes[]下面是相关的缺失底部,您可以看到该部分已更改为与新的复选框值匹配:
// // If the delete bulk action is triggered
if ( ( isset( $_POST['action'] ) && $_POST['action'] == 'bulk-delete' )
|| ( isset( $_POST['action2'] ) && $_POST['action2'] == 'bulk-delete' )
) {
$delete_ids = esc_sql( $_POST['my_CheckBoxes'] );
// loop over the array of record IDs and delete them
foreach ( $delete_ids as $id ) {
self::delete_customer( $id );
}
wp_redirect( esc_url( add_query_arg() ) );
exit;
}https://stackoverflow.com/questions/37345092
复制相似问题