You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress通过ID从wp_posts表删除图片及AJAX交互实现方法

服务端代码补全方案

直接使用WordPress原生函数实现即可,安全性和兼容性都优于自定义SQL操作,补全后的完整代码如下:

add_action( 'wp_ajax_delete_image_admin', 'delete_image_admin' );
function delete_image_admin(){
    // 权限校验:仅允许有编辑权限的用户执行删除操作
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_send_json_error( '权限不足,无法删除图片' );
    }

    // 入参格式化:转成正整数避免SQL注入风险
    $deleteId = absint( $_POST['deletedId'] );
    if ( ! $deleteId ) {
        wp_send_json_error( '无效的图片ID' );
    }

    // 执行删除:第二个参数传true会同时删除服务器上的源文件和各尺寸裁剪图,传false仅删除数据库记录
    $delete_result = wp_delete_attachment( $deleteId, true );

    if ( $delete_result ) {
        $return = array(
            'message'   => '删除成功',
            'ID'        => $deleteId,
        );
        wp_send_json_success( $return );
    } else {
        wp_send_json_error( '图片删除失败,请检查ID是否存在' );
    }
};

补充说明

  • 原生wp_delete_attachment函数会自动处理所有关联数据清理:删除wp_posts表附件记录、删除wp_postmeta表关联元数据、清理文章和图片的关联关系,不需要自己手写SQL操作数据库。
  • 如果你确实需要自定义SQL实现(不推荐),可以用以下代码替代wp_delete_attachment部分:
global $wpdb;
// 删除主图片记录
$wpdb->delete( $wpdb->posts, array( 'ID' => $deleteId ), array( '%d' ) );
// 删除关联的子附件记录
$wpdb->delete( $wpdb->posts, array( 'post_parent' => $deleteId ), array( '%d' ) );
// 删除关联的元数据
$wpdb->delete( $wpdb->postmeta, array( 'post_id' => $deleteId ), array( '%d' ) );
  • 可同步优化前端AJAX的成功回调,增加错误提示,优化体验:
success: function( res ) {
    if ( res.success ) {
        img.remove();
    } else {
        alert(res.data);
    }
}

内容的提问来源于stack exchange,提问作者Regular User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 19:06:04