問題描述
在我的解決方案中,我希望盡可能自動化產品創建.在我看來,一種節省時間的方法是將可下載文件自動添加到產品中.
In my solution I want to automate the product creation as much as possible. One time saver is, in my opinion, to auto add the downloadable file to the product.
我創建了這個函數:
function fcsp_add_downloadable_file($post_id, $post, $update){
$post_thumbnail_id = get_post_thumbnail_id( $post_id );
$url = get_site_url()."/wp-content/uploads/".get_the_date('Y')."/".get_the_date('m')."/".$filename_only = basename( get_attached_file( $post_thumbnail_id ) );
update_post_meta($post_id, '_downloadable_files' , $url);
}
add_action( 'save_post', 'fcsp_add_downloadable_file', 99, 3 );
當我更新產品時,我可以看到文件路徑已保存到 _downloadable_files 元鍵.然而,它只是純文本,而不是 woocommerce 存儲它的方式.查看屏幕截圖(這是使用 Woo Add Product 界面創建的另一個產品:
I can see when I update the product that the file path is saved to the _downloadable_files meta key. However it is just plain text and not in the way woocommerce stores it. See screenshot (this is from another product created with the Woo Add Product interface:
它也未被 woocommerca 識別為可下載文件.非常感謝您對解決此問題的任何幫助.
It is also not recognized by woocommerca as a downloadable file. Any help on fixing this is much appreciated.
第二部分
這是要設置的產品標題:
This is the product title to be set:
我們必須從圖像的 EXIF 元標記標題"中獲取它,并且必須在保存產品之前或保存產品時將其設置為產品名稱.($filemeta['image_meta']['title'];
)
We have to get it from the EXIF meta tag "title" from the image and has te be set as the product name before or while saving the product. ($filemeta['image_meta']['title'];
)
推薦答案
Update 2 (添加了 if 語句以允許下載生成僅到一個文件)
以下代碼將自動添加由產品圖片制作的可下載文件(下載標題來自 EXIF 數據標題).
The following code will auto add a downloadable file made from the product image (The download title comes from the EXIF data title).
您最好使用專用的 woocommerce_admin_process_product_object
動作掛鉤和可用的 CRUD 對象和 getter/setter 方法 woocommerce 3 以這種方式引入:
You should better use dedicated woocommerce_admin_process_product_object
action hook and available CRUD objects and getters / setters methods introduced with woocommerce 3 this way:
add_action( 'woocommerce_admin_process_product_object', 'auto_add_downloadable_file', 50, 1 );
function auto_add_downloadable_file( $product ){
// Get downloads (if there is any)
$downloads = (array) $product->get_downloads();
// Only added once (avoiding repetitions
if( sizeof($downloads) == 0 ){
// Get post thumbnail data
$thumb_id = get_post_thumbnail_id( $product->get_id() );
$src_img = wp_get_attachment_image_src( $thumb_id, 'full');
$img_meta = wp_get_attachment_metadata( $thumb_id, false );
// Prepare download data
$file_title = $img_meta['image_meta']['title'];
$file_url = reset($src_img);
$file_md5 = md5($file_url);
$download = new WC_Product_Download(); // Get an instance of the WC_Product_Download Object
// Set the download data
$download->set_name($file_title);
$download->set_id($file_md5);
$download->set_file($file_url);
$downloads[$md5_num] = $download; // Insert the new download to the array of downloads
$product->set_downloads($downloads); // Set new array of downloads
}
}
代碼位于活動子主題(或活動主題)的 function.php 文件中.經測試有效.
Code goes in function.php file of your active child theme (or active theme). Tested and works.
您還可以使用 is_downloadable 檢查產品是否可下載()
方法在函數內部啟動時的 IF
語句中.
You could also check if product is downloadable using
is_downloadable()
method in anIF
statement on start inside the function.
這篇關于以編程方式將可下載文件添加到 Woocommerce 產品的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!