在WooCommerce中批量应用下载权限给客户

时间:2016-07-24 13:50:27

标签: php wordpress woocommerce

我想知道是否有人知道如何在WooCommerce中批量应用下载权限。例如:

我们说我有100个订单。他们都有权使用产品A."但是,我创建了一个新产品,并且希望他们也获得许可,我们称之为“产品B”。"是否有脚本,函数等将一组订单ID的权限应用于新的可下载产品?

我已经查看了wc_downloadable_product_permissions,这看起来很有希望,但没有提供足够的参数来让我实现这一目标。任何帮助/方向将不胜感激!

1 个答案:

答案 0 :(得分:0)

我搜索了很多但没有找到任何解决方案,或者您可以为所有用户创建新订单(使用代码创建礼品订单),并且根据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 );

这一切都应该在订单循环中,就是这样。