函数文档

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.