以编程方式在 Woocommerce 可下载产品中添加下载 [英] Add downloads in Woocommerce downloadable product programmatically
问题描述
我正在创建一个 Woocommerce 网站,我想让供应商从他们的前端上传产品.但我坚持要尝试添加 woocommerce 可下载产品.
I am creating a Woocommerce site where I wanna give vendors to upload products from their front end. But I stuck on a point where I am trying to add woocommerce downloadable products.
这是我当前的代码:
//Let's upload the download file Zip
$zipattachment_id = upload_music_files($music_ID, $musicZip); //This is my custom function which returns attachment id after file upload
$download_file_name = $musicZip['name'];
$download_file_url = wp_get_attachment_url($zipattachment_id);
$md5_download_num = md5( $download_file_url );
//creating array of download product
$downloadable_file[$md5_download_num] = array(
'id' => $md5_download_num,
'name' => $download_file_name,
'file' => $download_file_url,
'previous_hash' => ''
);
$downloadMusic = serialize($downloadable_file);
// adding downloadble file with the new array
add_post_meta( $music_ID, '_downloadable_files', $downloadMusic );
但是当我从后端打开产品编辑时,没有可下载的文件退出.
But when I open the product edit from backend no downloadable files exits.
这是序列化数组的返回示例:
Here is example return of the seriallized array :
a:1:{s:32:"22618d7f028803f57f98ab6b21277387";a:4:{s:2:"id";s:32:"22618d7f028803f57f98ab6b21277387";s:4:"name";s:5:"1.zip";s:4:"file";s:71:"http://mydomain/wp-content/uploads/2017/12/5a2e22cecaca6_1.zip";s:13:"previous_hash";s:0:"";}}
我正在使用最新版本的 woocommerce,有人可以告诉我我做错了什么以及什么是正确的方法吗?
I am working with the latest version of woocommerce, can anybody suggest me what I am doing wrong and what can be the right way?
推荐答案
你最好使用 WC_Product
和 WC_Product_Download
方法.我重新审视了您的代码,重命名/缩短了您的变量名称.
You should better use WC_Product
and WC_Product_Download
methods. I have revisited your code renaming/shortening a bit your variables names.
代码:
//This is my custom function which returns attachment id after file upload
$zip_attachment_id = upload_music_files( $music_id, $music_zip );
$file_name = $music_zip['name'];
$file_url = wp_get_attachment_url( $zip_attachment_id );
$download_id = md5( $file_url );
// Creating an empty instance of a WC_Product_Download object
$pd_object = new WC_Product_Download();
// Set the data in the WC_Product_Download object
$pd_object->set_id( $download_id );
$pd_object->set_name( $file_name );
$pd_object->set_file( $file_url );
// Get an instance of the WC_Product object (from a defined product ID)
$product = wc_get_product( $music_id ); // <=== Be sure it's the product ID
// Get existing downloads (if they exist)
$downloads = $product->get_downloads();
// Add the new WC_Product_Download object to the array
$downloads[$download_id] = $pd_object;
// Set the complete downloads array in the product
$product->set_downloads($downloads);
$product->save(); // Save the data in database
经过测试并有效
现在您必须确保您的 $music_id
变量是产品 ID:
Now you have to be sure that your
$music_id
variable is the product ID in:
$product = wc_get_product( $music_id );
如果不是,您应该直接从 global $product;
If not you should get directly the WC_Product
object from global $product;
OR 来自 global $post;
和 $product_id = $post->ID;
的产品 ID,在代码:
OR the product ID from global $post;
and $product_id = $post->ID;
, making some changes in the code:
global $post;
$product = wc_get_product( $post->ID );
这篇关于以编程方式在 Woocommerce 可下载产品中添加下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!