問題描述
在我的解決方案中,我希望盡可能自動(dòng)化產(chǎn)品創(chuàng)建.在我看來,一種節(jié)省時(shí)間的方法是將可下載文件自動(dòng)添加到產(chǎn)品中.
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.
我創(chuàng)建了這個(gè)函數(shù):
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 );
當(dāng)我更新產(chǎn)品時(shí),我可以看到文件路徑已保存到 _downloadable_files 元鍵.然而,它只是純文本,而不是 woocommerce 存儲(chǔ)它的方式.查看屏幕截圖(這是使用 Woo Add Product 界面創(chuàng)建的另一個(gè)產(chǎn)品:
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 識(shí)別為可下載文件.非常感謝您對(duì)解決此問題的任何幫助.
It is also not recognized by woocommerca as a downloadable file. Any help on fixing this is much appreciated.
第二部分
這是要設(shè)置的產(chǎn)品標(biāo)題:
This is the product title to be set:
我們必須從圖像的 EXIF 元標(biāo)記標(biāo)題"中獲取它,并且必須在保存產(chǎn)品之前或保存產(chǎn)品時(shí)將其設(shè)置為產(chǎn)品名稱.($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 語句以允許下載生成僅到一個(gè)文件)
以下代碼將自動(dòng)添加由產(chǎn)品圖片制作的可下載文件(下載標(biāo)題來自 EXIF 數(shù)據(jù)標(biāo)題).
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
動(dòng)作掛鉤和可用的 CRUD 對(duì)象和 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
}
}
代碼位于活動(dòng)子主題(或活動(dòng)主題)的 function.php 文件中.經(jīng)測(cè)試有效.
Code goes in function.php file of your active child theme (or active theme). Tested and works.
您還可以使用 is_downloadable 檢查產(chǎn)品是否可下載()
方法在函數(shù)內(nèi)部啟動(dòng)時(shí)的 IF
語句中.
You could also check if product is downloadable using
is_downloadable()
method in anIF
statement on start inside the function.
這篇關(guān)于以編程方式將可下載文件添加到 Woocommerce 產(chǎn)品的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!