十一年专注,只做WordPress定制开发一件事

自定义WordPress媒体上传rest api

王超
2024-01-15
主题开发
564 次

我们知道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转WordPressWordPress仿站以及以WordPress为管理后端的小程序、APP,我们一直秉持“做一个项目,交一个朋友”的理念,希望您是我们下一个朋友。如果您有WordPress主题开发需求,可随时联系QQ:919985494 微信:18539976310

搜索

嘿,有问题找我来帮您!