首页 文章

无法在过滤器中访问WooCommerce订单ID

提问于
浏览
2

有什么方法可以将一个回调函数中的当前订单ID挂钩到一个回调为 not passed the order ID by default 的WooCommerce过滤器?

示例挂钩符合此条件的WooCommerce过滤器:

add_filter('woocommerce_get_downloadable_file_urls', array('fooClass', 'fooFighter'), 10, 4);

这个钩子将以下变量传递给回调:

  • $ file_urls

  • $ product_id

  • $ variation_id

  • $ item

我已经考虑过通过$ woocommerce访问订单ID,将其定义为全局 . 在这种情况下(当WooCommerce向客户发送完成的订单电子邮件时),$ woocommerce不包含WC_Order对象 .

有关其他信息,我正在尝试使用上述钩子为特定的WooCommerce产品创建自定义下载链接 . 每次在已完成的订单电子邮件中列出可下载产品时,再次在订单完成页面上调用此过滤器 . 要创建自定义链接,我需要order_id .

2 回答

  • 0

    我知道已经有一段时间了,但是我今天偶然发现了同样的问题并通过将以下代码放在我的过滤器函数中来修复它 .

    global $woocommerce;
    $orderId = $woocommerce->woocommerce_email->emails['WC_Email_New_Order']->object->id;
    

    $ woocommerce-woocommerce_email-> emails变量仅在发送电子邮件时设置,因此可能还需要添加一些检查 .

    希望有一天能帮助某人 . :)

  • 1

    我也知道这已经很老了,但只是想注意,对于WooCommerce 2.2, get_downloadable_file_urls() 方法已被弃用,而不是 get_item_downloads() . 这意味着适当的过滤器现在将是 woocommerce_get_item_downloads .

    return apply_filters( 'woocommerce_get_item_downloads', $files, $item, $this );
    

    第三个参数是 $this ,因为 get_item_downloads()WC_Abstract_Order 摘要中的一个方法(负责WC_Order)最终意味着它是 $order 对象而 $order->id 将是ID .

相关问题