前段時間搭建了 Chevereto 圖床,但在 WordPress 編輯器裡需要上傳圖片的時候,需要另外打開圖床上傳比較麻煩。這時候可以在 WordPress 的編輯器裡添加個上傳按鈕,利用 API 上傳到 Chevereto 圖床,這樣上傳圖片到圖床就方便啦!
添加方法修改 Chevereto獲取 API KEY: 登錄,轉到儀表盤-設置-API,將 API v1 key 記錄下來; API 後端設置: 進入 Chevereto 的安裝目錄,將 app/routes/route.api.php 文件拷貝到 app/routes/overrides/route.api.php 文件; 允許跨域: 打開 app/routes/overrides/route.api.php,添加 - header('Access-Control-Allow-Origin: [url]https://www.yunloc.com[/url]');
- header('Access-Control-Allow-Methods: POST');
- header('Access-Control-Allow-Headers: Content-Type, Accept, Authorization, X-Requested-With, Origin, Accept');
複製代碼設置 API user(可選): 在 app/routes/overrides/route.api.php 中,找到$uploaded_id = CHVImage::uploadToWebsite($source);那一行,更改為 - $uploaded_id = CHVImage::uploadToWebsite($source,admin);
複製代碼將 admin 替換為圖床中的用戶; 修改 WordPress前端添加上傳按鈕(media button): 將以下代碼添加到 WordPress 正在使用的主題目錄的 functions.php 中 - //添加圖床上傳按鈕
- add_action('media_buttons', 'add_my_media_button');
- function add_my_media_button() {
- $currentUser = wp_get_current_user();
- if(!empty($currentUser->roles) && in_array('administrator', $currentUser->roles)){
- $DOMAIN="圖床的域名 例:img.7198.net";
- $APIkey="圖床的 API v1 key";// 是管理員
- }
- else
- return 0; // 非管理員
- echo '
-
- 上傳圖片到 Chevereto
- ';
- ?>
- }
複製代碼 更新上傳有問題,主要是 https 混用和 CORS 的問題,故在這裡更新上傳方法,上傳方式改用 WordPress REST API,為了保證兼容,請確保 WordPress 版本為 4.9+。注意:前文的操作均不用管,以下的操作均在 functions.php 中完成。 註冊路由
- add_action('rest_api_init', function () {
- register_rest_route('chevereto/v1', '/image/upload', array(
- 'methods' => 'POST',
- 'callback' => 'upload_to_chevereto',
- ));
- });
複製代碼之後,可以使用 post 的方式發送數據到 http(s)://博客域名/chevereto/v1/image/upload 來上傳圖片。 加入回調函數
- function upload_to_chevereto() {
- //Authentication
- if (!check_ajax_referer('wp_rest', '_wpnonce', false)) {
- $output = array('status' => 403,
- 'message' => 'Unauthorized client.',
- 'link' => $link,
- );
- $result = new WP_REST_Response($output, 403);
- $result->set_headers(array('Content-Type' => 'application/json'));
- return $result;
- }
- $image = file_get_contents($_FILES["chevereto_img_file"]["tmp_name"]);
- $upload_url = '圖床的域名/api/1/upload';
- $args = array(
- 'body' => array(
- 'source' => base64_encode($image),
- 'key' => '圖床的 API v1 key',
- ),
- );
- $response = wp_remote_post($upload_url, $args);
- $reply = json_decode($response["body"]);
- if ($reply->status_txt == 'OK' && $reply->status_code == 200) {
- $status = 200;
- $message = "success";
- $link = $reply->image->image->url;
- } else {
- $status = $reply->status_code;
- $message = $reply->error->message;
- $link = $link;
- }
- $output = array(
- 'status' => $status,
- 'message' => $message,
- 'link' => $link,
- );
- $result = new WP_REST_Response($output, $status);
- $result->set_headers(array('Content-Type' => 'application/json'));
- return $result;
- }
複製代碼將圖床的域名和圖床的 API v1 key 填寫完整,注意加上 http 或 https 後台編輯器添加按鈕
- //添加圖床上傳按鈕
- add_action('media_buttons', 'add_my_media_button');
- function add_my_media_button() {
- echo '
-
- 上傳圖片到 Chevereto
- ';
- ?>
- }
複製代碼 原文鏈接:https://spiritx.xyz/843.html
|