Code tự động lưu ảnh vào host khi copy bài từ nguồn khác

Bạn đã từng copy bài viết từ một nguồn khác nhưng lại quên lấy hình ảnh? Đừng lo, trong bài viết này, chúng ta sẽ chia sẻ một đoạn mã giúp tự động lưu ảnh vào host chỉ bằng một lần nhấn save.

Code tự động lưu ảnh vào host

Với đoạn mã sau, bạn có thể tự động lưu tất cả hình ảnh khi copy từ nguồn khác chỉ thông qua một lần bấm save.

class Auto_Save_Images{

    function __construct(){     

        add_filter( 'content_save_pre',array($this,'post_save_images') ); 
    }

    function post_save_images( $content ){
        if( ($_POST['save'] || $_POST['publish'] )){
            set_time_limit(240);
            global $post;
            $post_id=$post->ID;
            $preg=preg_match_all('/<img.*?src="(.*?)"/',stripslashes($content),$matches);
            if($preg){
                foreach($matches[1] as $image_url){
                    if(empty($image_url)) continue;
                    $pos=strpos($image_url,$_SERVER['HTTP_HOST']);
                    if($pos===false){
                        $res=$this->save_images($image_url,$post_id);
                        $replace=$res['url'];
                        $content=str_replace($image_url,$replace,$content);
                    }
                }
            }
        }
        remove_filter( 'content_save_pre', array( $this, 'post_save_images' ) );
        return $content;
    }

    function save_images($image_url,$post_id){
        $file=file_get_contents($image_url);
        $post = get_post($post_id);
        $posttitle = $post->post_title;
        $postname = sanitize_title($posttitle);
        $im_name = "$postname-$post_id.jpg";
        $res=wp_upload_bits($im_name,'',$file);
        $this->insert_attachment($res['file'],$post_id);
        return $res;
    }

    function insert_attachment($file,$id){
        $dirs=wp_upload_dir();
        $filetype=wp_check_filetype($file);
        $attachment=array(
            'guid'=>$dirs['baseurl'].'/'._wp_relative_upload_path($file),
            'post_mime_type'=>$filetype['type'],
            'post_title'=>preg_replace('/.[^.]+$/','',basename($file)),
            'post_content'=>'',
            'post_status'=>'inherit'
        );
        $attach_id=wp_insert_attachment($attachment,$file,$id);
        $attach_data=wp_generate_attachment_metadata($attach_id,$file);
        wp_update_attachment_metadata($attach_id,$attach_data);
        return $attach_id;
    }
}
new Auto_Save_Images();

Lưu lại và kiểm tra kết quả.

Tải động tải hình ảnh về host bằng Plugin QQWorld Auto Save Images

Ngoài việc sử dụng đoạn mã trên, bạn cũng có thể dùng plugin QQWorld Auto Save Images để tự động tải hình ảnh về sau khi bấm save.

Chúc bạn thành công!

Điểm: 5/5 – (Có 5 bình chọn)

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *