我搜索了很多但没有找到任何解决方案,或者您可以为所有用户创建一个新订单(使用代码创建礼品订单),并且根据 woocommerce 结构/规则,所有用户都可以从我的帐户下载该产品关联。这不是最佳解决方案,但您的工作不会挂起。
编辑:(使用以下方法)
循环遍历所有订单并将产品添加到所有订单(即使在订单完成后,您也可以在任何订单中添加产品),您可以使用以下代码添加产品:
$product = wc_get_product($product_id);
$item = array(
'order_item_name' => $product->get_title(),
);
$item_id = wc_add_order_item( $order_id, $item );
然后你需要添加一些元:
wc_add_order_item_meta( $item_id, '_qty', 1 );
wc_add_order_item_meta( $item_id, '_tax_class', $product->get_tax_class() );
wc_add_order_item_meta( $item_id, '_product_id', $product->id );
wc_add_order_item_meta( $item_id, '_variation_id', $variation_id );
wc_add_order_item_meta( $item_id, '_line_subtotal', 0);
wc_add_order_item_meta( $item_id, '_line_subtotal_tax', '' );
wc_add_order_item_meta( $item_id, '_line_total', 0);
wc_add_order_item_meta( $item_id, '_line_tax', '' );
wc_add_order_item_meta( $item_id, '_line_tax_data', 0 );
最后调用:
wc_downloadable_product_permissions( $order_id );
如果您的订单已经有可下载的产品,那么在上面功能的地方使用下面的代码:
$order = new WC_Order( $order_id );
if ( sizeof( $order->get_items() ) > 0 )
{
foreach ( $order->get_items() as $item )
{
$_product = $order->get_product_from_item( $item );
if ( $_product && $_product->exists() && $_product->is_downloadable() )
{
$downloads = $_product->get_files();
foreach ( array_keys( $downloads ) as $download_id )
{
wc_downloadable_file_permission( $download_id, $item['variation_id'] > 0 ? $item['variation_id'] : $item['product_id'], $order, $item['qty'] );
}
}
}
}
update_post_meta( $order_id, '_download_permissions_granted', 1 );
这一切都应该在订单循环中,就是这样。