【问题标题】:Apply Download Permission to Customers in Bulk in WooCommerce在 WooCommerce 中批量向客户应用下载权限
【发布时间】:2016-07-24 13:50:27
【问题描述】:

我想知道是否有人知道在 WooCommerce 中将下载权限应用于批量订单的方法。例如:

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

我研究了wc_downloadable_product_permissions,看起来很有希望,但没有提供足够的参数来让我完成这项工作。任何帮助/指导将不胜感激!

【问题讨论】:

  • 一个想法:与其直接基于产品应用下载权限,不如在您的情况下更方便,创建一种可以处理产品下载权限的特殊属性(可下载系列),其中他们已经设置好了。这样,当您添加新产品时,您将链接到其中一个属性,同时扩展下载权限……这只是一个想法,现在完成这项工作是另一回事……
  • 嗨@LoicTheAztec 感谢您的回复!在这种情况下,我需要它更多的迁移工具。我目前正在将我的简单产品与下载转换为具有多个下载的可变产品。

标签: php wordpress woocommerce


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多