使用行操作从数据库中删除数据

时间:2021-09-04 作者:BElluu

我对如何使用行操作实现从数据库中删除数据没有什么问题。我有我的自定义列表,其中包括数据库表中的数据。List

 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,一切正常!:)

2 个回复
最合适的回答,由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();

}

SO网友:Mafnah

我认为最好使用$wpdb->delete() 函数删除行。

$article_id = $item[\'article_id\'];
$table = \'wp_copywriter_articles\';
$wpdb->delete( $table, array( \'id\' => $article_id ) );

相关推荐

Show content from database

这是我在Wordpress StackExchange上的第一篇帖子,所以请温柔一点。我在WordPress工作了一段时间,但更多的是作为前端开发人员,而不是太多的后端开发人员。我有在Joomla工作的背景(不要对我不利……)我正在从事一个当前的项目,其中一个API正在将数据注入数据库,WordPress网站有权访问的内容(尚未决定是WordPress数据库还是外部数据库。数据基于艺术品,因此各种数据与每件艺术品相关,还需要搜索/筛选选项来查看数据库中的各种数据。我的问题是,我如何获取数据以显示在网站前端