2013-08-25 2 views
2

Каковы некоторые способы получить идентификатор текущего заказа из функции обратного вызова, подключенного к фильтру WooCommerce, где обратный вызов не прошел идентификатор заказа по умолчанию?Неисправность доступа к идентификатору заказа WooCommerce в пределах фильтра

Пример крюка к WooCommerce фильтра, который отвечает этому критерию:

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

Этот крюк passess следующие переменные для обратного вызова:

  1. $ file_urls
  2. $ product_id
  3. $ variant_id
  4. $ item

Я изучил доступ к идентификатору заказа через $ woocommerce, определив его как глобальный. В этом случае (когда WooCommerce отправляет клиенту заполненную электронную почту), $ woocommerce не содержит объект WC_Order.

За дополнительной информацией, я пытаюсь использовать вышеупомянутый крюк для создания пользовательских ссылок для загрузки для определенных продуктов WooCommerce. Этот фильтр вызывается каждый раз, когда загружаемый продукт указан в заполненном электронном письме заказа и снова на странице завершения заказа). Чтобы создать пользовательскую ссылку, мне нужен order_id.

ответ

1

Я знаю, что прошло некоторое время с тех пор, как это было задано, но сегодня я наткнулся на эту же проблему и исправил ее, поместив следующий код в мою функцию фильтра.

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

в $ WooCommerce-woocommerce_email-> переменные письма устанавливаются только при отправке сообщения электронной почты, так что добавление некоторых проверок также может быть необходимо.

Надеюсь, это когда-нибудь поможет кому-то. :)

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 объект и $order->id будет идентификатор.

Смежные вопросы