Tùy chỉnh thư mục lưu trữ định dạng file cụ thể

Đăng ký tài khoản kiếm tiền với tiếp thị liên kết tại ACCESSTRADE, MasOffer, Lazada Việt Nam
Trong 1 số trường hợp cụ thể quá trình phát triển plugin/ theme nhất định chúng ta cần lưu trữ dữ liệu upload lên theo nhu cầu nào đó.
 
Ở trường hợp trong bài mình đang xử lý plugin scale design cho hệ thống bán áo thun mình đang phát triển tại PolyXGO. Dữ liệu xử lý là fonts chữ (các loại dữ liệu đặc thù riêng thì tùy tình huống mà bạn xử lý nhé!)

Ví dụ: mình muốn khi upload dữ liệu FONTS thì toàn bộ sẽ được lưu trữ trong 1 thư mục cụ thể là FONTS: wp-content/upload/fonts + ký tự đầu tiên tên font chữ:
wp-content/upload/fonts/t/TWOFOLD uncomplete DeSigN.ttf
wp-content/upload/fonts/t/Titania.ttf
wp-content/upload/fonts/p/P22 Posada Regular Regular.ttf

Tại sao phải tạo thêm sub folder là ký tự đầu tên font?

Việc thêm thư mục mang ký tự đầu tiên tên font chữ nhằm mục đích tăng hiệu suất khi đọc folder đó (mọi người xử lý dữ liệu nhiều sẽ hiểu nỗi đau khổ của việc đọc vài chục ngàn file trong 1 folder – THẢM HỌA nếu bạn không rành về kỹ thuật).

Thêm với đó mình ước lượng dung lượng data fonts sẽ rơi tầm 450K+ * 106KB ~ 48GB (dựa trên thống kê của website https://www.whatfontis.com/) nên việc tạo sub folder sẽ giảm tải việc truy suất các folder sau này!. Nếu kỹ hơn bạn có thể tạo thêm sub folder dạng ngày tháng nữa nhé! (mặc định wordpress đã hỗ trợ dạng này – bạn dựa trên code mẫu để điều chỉnh cho phù hợp).
thì đoạn code sẽ như sau:

/*Custom upload fonts type*/
add_filter('wp_handle_upload', 'polyxgo_products_design_post_upload_filter');
add_filter('wp_handle_upload_prefilter', 'polyxgo_products_design_pre_upload_filter' );
function polyxgo_products_design_pre_upload_filter( $file ){
    add_filter('upload_dir', 'polyxgo_products_design_upload_dir');
    return $file;
}
function polyxgo_products_design_post_upload_filter($fileinfo){
    remove_filter('upload_dir', 'polyxgo_products_design_upload_dir');
    return $fileinfo;
}
function polyxgo_products_design_upload_dir($path){
	$file=$_POST['name'];
    $extension = substr(strrchr($file,'.'),1);
    if(!empty($path['error']) ||  ($extension != 'ttf'&&  $extension != 'otf'&&  $extension != 'woff'&&  $extension != 'svg'&& $extension != 'eot')) { return $path; }
    $file_name=substr($file,0,strpos($file,'.'));
    $customdir = '/fonts/'.substr(strtolower($file_name),0,1);/*get first character font name*/
    $path['path']    = str_replace($path['subdir'], '', $path['path']); /*remove default subdir (year/month)*/
    $path['url']     = str_replace($path['subdir'], '', $path['url']);      
    $path['subdir']  = $customdir;
    $path['path']   .= $customdir; 
    $path['url']    .= $customdir;  
    return $path;
}
/*Accept fonts type upload*/
function polyxgo_products_design_add_custom_upload_mimes($existing_mimes) {
  	$existing_mimes['otf'] = 'application/x-font-otf';
  	$existing_mimes['woff'] = 'application/x-font-woff';
  	$existing_mimes['ttf'] = 'application/x-font-ttf';
  	$existing_mimes['svg'] = 'image/svg+xml';
  	$existing_mimes['eot'] = 'application/vnd.ms-fontobject';
  	return $existing_mimes;
 }
function polyxgo_products_design_init(){
	add_filter('upload_mimes', 'polyxgo_products_design_add_custom_upload_mimes');
	add_action('woocommerce_before_single_product_summary', 'polyxgo_products_design_single_products_summary');
}
/*Custom upload fonts type*/

#TheLovesOf

Đánh giá bài chia sẻ
Nếu bạn mong muốn tìm hiểu rõ hơn về chia sẻ này và những chia sẻ khác, bạn có thể kết nối với mình qua các thông tin sau:
Facebook (vui lòng add friend mình trước vì message ẩn mình ít check): https://www.facebook.com/PExpress
Blog: PolygonExpress.com
Group thảo luận - chia sẻ - bán ứng dụng - PolyXGO: MMO tools
Web dịch vụ: PolyXGO.com
Mã Giảm Giá mua sắm: Mã Giảm Giá Guru
Email liên hệ: polyxgo@gmail.com
Điện thoại: 0937.798.420 - 0868.929.024 (Kim Ngọc - giới tính Nam :))))))

Related

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.