WordPress-错误反馈工具

一:WP_Error

WP_Error:PHP 内部的「错误对象」

在 PHP 代码内部封装错误信息(如错误码、错误消息),让函数可以返回结构化的错误结果,而非简单的 false 或异常。

/**
 * 模拟一个获取用户数据的函数
 * @param int $user_id 用户ID
 * @return array|WP_Error 成功返回数据,失败返回WP_Error
 */
function get_user_data($user_id) {
    // 1. 验证参数合法性
    if (!is_numeric($user_id)) {
        // 返回WP_Error:错误码+错误消息
        return new WP_Error('invalid_user_id', '用户ID必须是数字');
    }

    // 2. 模拟数据库查询失败
    $user_data = get_user_by('id', $user_id); // WordPress内置函数
    if (!$user_data) {
        return new WP_Error('user_not_found', '用户不存在');
    }

    // 3. 成功返回数据
    return [
        'name' => $user_data->display_name,
        'email' => $user_data->user_email
    ];
}

// 调用函数并处理结果
$result = get_user_data('abc'); // 传入非数字ID,触发错误

if (is_wp_error($result)) {
    // 处理错误:输出错误码和消息
    echo "错误码:" . $result->get_error_code() . "<br>";
    echo "错误消息:" . $result->get_error_message();
} else {
    // 处理成功数据
    print_r($result);
}

二:wp_send_json_success

见wp_send_json_error

三:wp_send_json_error

向前端(如 JavaScript) 返回 标准化的 JSON 响应,自动设置 Content-Type: application/json 头,并结束 PHP 脚本执行(类似 exit)。

add_action('wp_ajax_submit_comment', 'ajax_submit_comment');
function ajax_submit_comment() {
    // 1. 验证用户权限
    if (!is_user_logged_in()) {
        $error = new WP_Error('not_logged_in', '请先登录');
        wp_send_json_error($error); // 自动解析WP_Error的code和message
    }

    // 2. 验证评论内容
    $content = $_POST['content'] ?? '';
    if (empty($content)) {
        $error = new WP_Error('empty_content', '评论内容不能为空');
        wp_send_json_error($error);
    }

    // 3. 模拟提交评论(省略实际逻辑)
    wp_send_json_success(['message' => '评论提交成功']);
}

前端 JS 接收:

fetch(ajaxurl + '?action=fetch_posts')
    .then(res => res.json())
    .then(data => {
        if (data.success) {
            console.log('成功:', data.data.message);
        } else {
            console.error('失败:', data.data.message);
        }
    });

前端接收的 JSON 结构(失败时):

{
  "success": false,
  "data": {
    "code": "empty_content",
    "message": "评论内容不能为空"
  }
}

四:wp_send_json_success()、wp_send_json() 和 wp_send_json_error()

在 WordPress 中,wp_send_json_success()、wp_send_json() 和 wp_send_json_error() 都是用于处理 AJAX 响应的核心函数,主要作用是将数据以 JSON 格式返回给前端,但它们的使用场景和响应结构有所不同。

三者都会自动设置 HTTP 响应头 Content-Type: application/json,确保前端能正确解析 JSON 数据。

都会在发送 JSON 数据后自动调用 wp_die() 终止脚本执行,避免后续输出(如空格、HTML 等)破坏 JSON 格式。

wp_send_json( $data )

通用 JSON 响应函数,用于返回自定义结构的 JSON 数据,没有固定格式限制。
传入的 $data 可以是任意类型(数组、对象、字符串等),会被直接编码为 JSON 并发送。

// 返回自定义结构的 JSON
$response = array(
  'message' => '操作完成',
  'data' => array( 'id' => 123, 'name' => '测试' )
);
wp_send_json( $response );

前端收到的 JSON 为:

{ "message": "操作完成", "data": { "id": 123, "name": "测试" } }

wp_send_json_success( $data = null )

专门用于表示 “成功” 状态的响应,会自动生成标准化的成功结构:

固定包含 success: true 字段,用于前端快速判断操作成功。

传入的 $data 会被包装在 data 字段中(可选,若不传则 data 为 null)。

// 操作成功,返回数据
$user_data = array( 'id' => 1, 'username' => 'admin' );
wp_send_json_success( $user_data );

前端收到的 JSON 为:

{ "success": true, "data": { "id": 1, "username": "admin" } }

用途:适合 AJAX 操作成功时使用(如数据提交成功、查询成功等),前端可通过 response.success === true 快速判断成功状态。

wp_send_json_error( $data = null )

专门用于表示 “错误” 状态的响应,会自动生成标准化的错误结构:
固定包含 success: false 字段,用于前端快速判断操作失败。
传入的 $data 会被包装在 data 字段中(可选,通常用于传递错误信息)。

// 操作失败,返回错误信息
$error = array( 'message' => '权限不足,无法执行操作' );
wp_send_json_error( $error );

前端收到的 JSON 为:

{ "success": false, "data": { "message": "权限不足,无法执行操作" } }

用途:适合 AJAX 操作失败时使用(如验证失败、权限不足、数据错误等),前端可通过 response.success === false 快速判断错误状态。