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

时间:2013-08-25 15:29:16

标签: woocommerce

有哪些方法可以将当前订单ID从连接到WooCommerce过滤器的回调函数中获取,其中回调默认情况下未通过订单ID

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

希望有一天这会帮助某人。 :)

答案 1 :(得分:0)

我也知道这已经过时了,但我只想注意,对于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对象和{{ 1}}将是ID。