我们知道WordPress拥有rest api功能,我们可以使用rest api从其他平台对我们的wordpress进行相关的增删改查,那么今天我们就分享给大家一个如何注册一个可以像wordpress上传媒体的rest api接口。
首先,我们使用register_rest_route()来注册这个rest api。我们将以下代码放在我们主题的functions.php文件中。
//注册媒体上传端点
register_rest_route(
'wp/v2',
'/upload_file',
array(
'methods' => 'POST',
'callback' => 'mx_handle_file_upload',
'permission_callback' => '__return_true',
)
);
我们可以看到,以上代码中,我们指定了一个回调函数,函数名称为:mx_handle_file_upload,那么我们下面的代码就是这个回调函数的具体内容,也是我们的核心代码,我们同样需要将以下代码放到您的主题中的functions.php文件中。
// WordPress REST API 端点处理上传文件
function mx_handle_file_upload() {
if (!empty($_FILES['file'])) {
$file = $_FILES['file'];
//在前端使用时,需要引入以下3个文件
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$attachment_id = media_handle_upload('file', 0);
if (is_wp_error($attachment_id)) {
// 处理上传错误
$response = array(
'code' => 0,
'error_type' => 'upload_error',
'msg' => wp_strip_all_tags($attachment_id->get_error_message()),
);
} else {
// 处理上传成功
$image_url = wp_get_attachment_image_url($attachment_id, 'full');
$response = array(
'code' => 1,
'msg' => 'success',
'data' => array(
'attachment_id' => $attachment_id,
'image_url' => $image_url,
)
);
}
} else {
// 如果没有上传文件,则返回错误信息
$response = array(
'code' => 0,
'error_type' => 'no_img_uploaded',
'msg' => '没有上传图片',
);
}
// 发送JSON响应
wp_send_json($response);
//注意,有时使用wp_send_json返回的数据结构可能不是app端想要的结构,那么你可以使用以下方法来替换wp_send_json();
//// 清理缓冲区
//ob_clean();
//// 设置JSON响应头
//header('Content-Type: application/json');
//echo json_encode($response, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
//die();
}
WordPress日记主要承接WordPress主题定制开发、PSD转WordPress、WordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494 微信:18539976310