wp_ajax_delete_meta()
云策文档标注
概述
wp_ajax_delete_meta() 是一个 WordPress AJAX 处理函数,用于安全删除 post meta 数据。它通过验证 AJAX 请求、检查权限和执行删除操作来确保数据完整性。
关键要点
- 函数通过 AJAX 处理 post meta 的删除请求,接收 POST 参数中的 meta ID。
- 使用 check_ajax_referer() 验证 AJAX 请求,防止 CSRF 攻击。
- 通过 get_metadata_by_mid() 获取 meta 数据,检查 is_protected_meta() 和 current_user_can() 确保权限。
- 如果验证通过,调用 delete_meta() 删除数据,并使用 wp_die() 返回状态码(1 成功,0 失败,-1 权限不足)。
代码示例
function wp_ajax_delete_meta() {
$id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0;
check_ajax_referer( "delete-meta_$id" );
$meta = get_metadata_by_mid( 'post', $id );
if ( ! $meta ) {
wp_die( 1 );
}
if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) {
wp_die( -1 );
}
if ( delete_meta( $meta->meta_id ) ) {
wp_die( 1 );
}
wp_die( 0 );
}注意事项
- 此函数专为 AJAX 请求设计,需在前端通过 AJAX 调用,并传递正确的 meta ID 和 nonce。
- 权限检查依赖于 current_user_can('delete_post_meta', ...),确保用户有删除特定 post meta 的权限。
- 返回状态码用于前端处理:1 表示成功删除或 meta 不存在,0 表示删除失败,-1 表示权限不足或受保护 meta。
原文内容
Handles deleting meta via AJAX.
Source
function wp_ajax_delete_meta() {
$id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0;
check_ajax_referer( "delete-meta_$id" );
$meta = get_metadata_by_mid( 'post', $id );
if ( ! $meta ) {
wp_die( 1 );
}
if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) {
wp_die( -1 );
}
if ( delete_meta( $meta->meta_id ) ) {
wp_die( 1 );
}
wp_die( 0 );
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |