我对如何使用行操作实现从数据库中删除数据没有什么问题。我有我的自定义列表,其中包括数据库表中的数据。
function column_name( $item ) {
$delete_nonce = wp_create_nonce();
$title = \'<strong>\' . $item[\'article_name\'] . \'</strong>\';
$actions = [
\'edit\' => sprintf(\'<a href="?page=%s&id=%s">Edit</a>\', \'edytuj-artykul\', $item[\'article_id\']),
\'delete\' => sprintf(\'<a href="?page=%s&action=%s&article_id=%s&_wpnonce=%s">Delete</a>\', esc_attr( $_REQUEST[\'page\'] ), \'delete\', absint($item[\'article_id\']), $delete_nonce)
];
return $title. $this->row_actions( $actions );
}
function delete_article($item){
$article_id = $item[\'article_id\'];
global $wpdb;
$table = \'wp_copywriter_articles\';
$wpdb->query("DELETE FROM $table WHERE article_id = %d", $article_id);
}
在我添加的同一个文件中
add_action( \'admin_action_delete\', \'delete_article\' );
当我单击Delete action时,什么都没有发生。我得到了linkhttp://localhost/wordpress/wp-admin/admin.php?page=Artykuly&;操作=删除(&D);article\\u id=26(&U)_wPNUNCE=60a01b82d7
但该记录不会从数据库中删除。
为了进行测试,我在SQL查询中的delete\\u article方法中添加了一个特定的文章ID号,但仍然不起作用,因此当我单击delete按钮时,WP不使用此方法。
有人可以告诉我我做错了什么,因为我花了这几个小时:)
向你问好,巴特克
@编辑
SOLVED
我的错误是将delete\\u article()方法放在自定义列表类中。当我将我的方法用于函数时。php,一切正常!:)
最合适的回答,由SO网友:Howdy_McGee 整理而成
这个"admin_action_{$_REQUEST[\'action\']}" hook 不传递任何参数。您需要从$\\u请求数组中获取article\\u id。还有一些其他问题,例如:
调用时未分配操作wp_create_nonce()
.作为Mafnah suggets in their ansewr, 您应该使用$wpdb::delete()作为使用$wpdb::prepare()
.以下是您可以重写此内容的方法:
function column_name( $item ) {
$delete_nonce = wp_create_nonce( \'delete_article\' );
$actions = [
\'delete\' => add_query_arg( array(
\'action\' => \'delete\',
\'article_id\' => $item[\'article_id\'],
\'_wpnonce\' => $delete_nonce,
), admin_url( \'admin.php\' ) ),
];
/* Etc... */
}
function delete_article() {
global $wpdb;
// Ensure we can verify our nonce.
if( ! wp_verify_nonce( $_REQUEST[\'_wpnonce\'], \'delete_article\' ) ) {
wp_die( esc_html__( \'Could not verify request. Please try again.\' ) );
// Ensure we have an article ID provided.
} else if( ! isset( $_REQUEST[\'article_id\'] ) ) {
wp_die( esc_html__( \'Could not find provided article ID. Please try again.\' ) );
// Ensure we\'re able to delete the actual article.
} else if( false === $wpdb->delete( \'wp_copywriter_articles\', array( \'article_id\' => $_REQUEST[\'article_id\'] ) ) ) {
wp_die( esc_html__( \'Could not delete the provided article. Please try again.\' ) );
}
// Redirect back to original page with \'success\' $_GET
wp_safe_redirect( add_query_arg( array(
\'page\' => ( isset( $_REQUEST[\'page\'] ) ) ? $_REQUEST[\'page\'] : \'404\',
\'success\' => 1,
), admin_url( \'admin.php\' ) ) );
exit();
}