一: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
快速判断错误状态。