在我的解决方案中,我想尽可能地使产品创建自动化。 我认为,一种省时的方法是将可下载文件自动添加到产品中。
我已经创建了此功能:
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界面创建的另一种产品:
woocommerca也不会将其识别为可下载文件。任何解决此问题的帮助都将受到赞赏。
编辑:第二部分
这是要设置的产品标题:
我们必须从图像的EXIF元标记“ title”中获取它,并且在保存产品之前或同时将其设置为产品名称。 ($filemeta['image_meta']['title'];
)
答案 0 :(得分:1)
更新2 (添加了一条if语句,允许仅生成一个下载文件 )
以下代码将自动添加由产品图片制成的可下载文件(下载标题来自EXIF数据标题)。
您最好以这种方式使用专用的woocommerce_admin_process_product_object
动作挂钩和woocommerce 3引入的可用CRUD objects and getters / setters methods:
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文件中。经过测试,可以正常工作。
您还可以在函数内部启动时在
IF
语句中使用is_downloadable()
方法检查产品是否可下载。