2

有哪些方法可以从挂钩到 WooCommerce 过滤器的回调函数中获取当前订单 ID,其中回调默认不传递订单 ID

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

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

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

  1. $file_urls
  2. $product_id
  3. $variation_id
  4. $项目

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

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

4

2 回答 2

1

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

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

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

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

于 2013-12-06T10:05:12.420 回答
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 );

第三个参数是$thiswhich,因为get_item_downloads()它是抽象中的方法WC_Abstract_Order(负责WC_Order)最终意味着它是$order对象并且$order->id是ID。

于 2014-09-16T12:02:25.473 回答