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
相关产品推荐
相关产品推荐

