天天看點

Wordpress抓取文章第一張遠端圖檔儲存到本地的方法

某些項目中,網站允許使用者使用外鍊圖檔釋出文章,或者處于某些特殊原因,網站希望抓取文中的第一張遠端圖檔作為特色圖檔,并像QQ空間一樣,将這張圖檔儲存到本地,并插入到資料庫中。

這個動作我們使用一個hook來實作:

再建立一個fetch_images函數,來實作本文所說的所有功能。

function fetch_images( $post_ID ){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
if ( !current_user_can('edit_post', $post_ID) ) return;
$post = get_post($post_ID);
           

接下來,我們要擷取文章内容中的第一張圖檔:

$first_image = '';
preg_match('/<img.+src=[\'\"]([^\'\"]+)[\'\"].* \/>/i',$post->post_content,$images);
if(!empty($images))foreach($images as $image){
if(strpos($image,'http') === 0){
$first_image = $images[1];
break;
}
}
           

但實際上,通過上述的代碼獲得的圖檔src可能也是有問題的,或者根本沒有抓取到資料。不過我們先不考慮這些問題,我們先實作本文的目标。

接下來就是關鍵代碼一,它要實作“抓取-儲存到本地”兩個功能:

$get = wp_remote_get( $get_image_src );
$type = wp_remote_retrieve_header( $get, 'content-type' );
$file_name = basename($get_image_src);
$file_content = wp_remote_retrieve_body($get);
$mirror = wp_upload_bits($file_name,null,$file_content);
           

這個地方有一個變化,上面我們獲得了 f i r s t i m a g e , 這 個 地 方 的 first_image,這個地方的 firsti​mage,這個地方的get_image_src是上述得到的要抓取的遠端圖檔位址。

在WordPress中,提供了wp_remote_get、wp_remote_retrieve_body等原創抓取和資訊擷取函數,你可以檢視官方文檔以了解和remote相關的函數。wp_upload_bits則将抓取到的圖檔的二進制内容儲存到本地,根據其檔案類型,最終成為本地儲存的圖檔,并将儲存完後獲得的本地圖檔資訊儲存在$mirror中。

既然已經儲存到本地了,接下來就是将圖檔資訊儲存到資料庫中。

本文轉自六藝開源:閱讀原文