關鍵字:wp2oc fileshare,wordpress媒體存進網盤,網盤作為wordpress圖床,owncloud wordpress backend storage
其實用網盤做wordpress網站的圖床一直是一個很流行的想法,業界存在oss,七牛網盤,百度盤wp2pcs,wp2pcs_sy方案,不過oss,七牛,百度盤pcs這三者始終是面向外接第三方服務,這些都不能得到服務保障,其中免費且最好用的百度盤pcs api需要申請權限,實用性大打拆扣。
這裡我們選擇的用owncloud作為wordpress的存儲後端,這二者生態相似,完成後的插件可以,1,基本(不能完全)代替wordpress原生圖片媒體管理功能,2,網盤圖床的操作/備份符合在文件夾操作文件習慣,且可以網盤特有的同步方式進行備份和打包,3,當媒體文件很大時,轉移wordpress整個媒體也就是改一條外鏈。不再需要涉及到數據庫備份。4,當然還有更多。。
1,確立需求:我們僅需要開發一個APP
我們需要的僅僅是將owncloud存儲服務做進wordpress,owncloud有自己的rest api,可以將其服務以wordpress插件的方式做進wordpress形成其後端圖床。
我們找到的是ocs filessharing api,為什麼必須是fileshare而不是file呢,因為做圖床的網盤必須是可以外鏈的。主要用到的是其get all share部分,所需的參數形式是http://www.xxx.com/ocs/path?=/dir&subfiles=true,首先對於使用到的參數部分我已經在後臺加了設置接口了,主要就是四個:
接下來就是開發和調試了
PS:開發是一步一步確立調試的過程,如果說編碼確定技術點然後一個一個攻克是尋龍過程,因為龍比較大還是比較容易發現的,而調試則是一個捉蟲的過程,常指代開發過程中,這二者所花的時間和過程往往在開發軟件和APP(APP指一些小軟件只有幾個)穿插。尤其是調試部分,需要頻繁進行,一個負責的開發實踐往往要體現這二者。
在下面的各個技點難點中,我們會同時談到技術點和調試手段,即龍和蟲:
2,技術難點:wordpress plugin開發
1,往wordpress媒體上傳框新加選項卡,以下參閱了否子戈的部分代碼。
// 在新媒體管理界面添加一個百度網盤的選項
function wp_storage_to_pcs_media_tab($tabs){
// if(!is_wp_to_pcs_active())return;
$newtab = array(‘tab_slug’ => ‘From Owncloud Fileshare’);
return array_merge($tabs,$newtab);
}
add_filter(‘media_upload_tabs’, ‘wp_storage_to_pcs_media_tab’);
// 這個地方需要增加一箇中間介wp_iframe,這樣就可以使用wordpress的腳本和樣式
function media_upload_file_from_pcs_iframe(){
wp_iframe(‘wp_storage_to_pcs_media_tab_box’);
}
add_action(‘media_upload_tab_slug’,’media_upload_file_from_pcs_iframe’);
?>
2,改造owncloud files_sharing app,使之顯示鏈接文件而不是外鏈共享文件。這是因為原文件中得到的結果是返回所有的共享而不是指定root share dir下的所有文件,而後者才是我們需要的,我使用的是8.0.16的相關文件,簡單修改如下:
private static function getSharesFromFolder($params) {
$path = $params[‘path’];
$view = new \OC\Files\View(‘/’.\OCP\User::getUser().’/files’);
if(!$view->is_dir($path)) {
return new \OC_OCS_Result(null, 400, “not a directory”);
}
$content = $view->getDirectoryContent($path);
$result = array();
foreach ($content as $file) {
$result = array_merge($result, array(‘1’=>$file[‘name’]) );
}
return new \OC_OCS_Result($result);
}
3,調試明確rest api一次request/response過程中的數據主要是什麼形式的:
好像bookmark用的rest api是第一代,用的是json,而ocs api用的是owncloud api,那為什麼二套可以共存呢,這是因為開源軟件都是慢慢發展起來的,歷史遺留中好的部分會存在很久。
注意,這裡會出現不確定的複雜情況比如無限要求密碼,此時記得要清空瀏覽器所有緩存重新粘貼完整url,調試一次就要清空一次才能保障調試結果順利進行。
4,讓owncloud ocs rest api免密碼,這是因為上面的調視是可視化進行的,而owncloud ocs api是需要程序內編碼驗證的,而這些不能瀏覽器端以傳遞給URL的方式進行,只能通過CURL http basic auth方式進行,能傳給URL的是以上幾個提到的配置參數。
function wp_storage_to_pcs_media_list_files(){
$ch = curl_init(“get_option(‘oc2wpfs_oc_server’)”./ocs/v1.php/apps/files_sharing/api/v1/shares?path=get_option(‘oc2wpfs_oc_dir’).”&subfiles=true”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, “get_option(‘oc2wpfs_oc_user’):get_option(‘oc2wpfs_oc_password’)”);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
……
}
得出以下基本調試視圖:
好了,接下來就是把獲到的API response解析為上傳媒體上的文件,讓editor支持選擇媒體等部分了。這樣插件就基本完成了,留到以後做。。
(此處不設回覆,掃碼到微信參與留言,或直接點擊到原文)