如何访问钩子woocommerce_new_order中的订单项?



woocommerce_new_order在订单项被分配给订单之前触发,从而使$order->get_items();返回一个空数组。

是否有办法使用该钩子获得项目?

使用wc_new_order创建订单,因此使用woocommerce_checkout_order_processed将无法工作。

是否有其他可以使用的钩子?

我正在使用事件日历,有了它,他们有一个功能,从一个事件与会者移动到另一个事件。

我使用钩子tribe_tickets_ticket_moved(https://docs.theeventscalendar.com/reference/hooks/tribe_tickets_ticket_moved/),但由于某种原因(?? ?)他们没有传递新的order_id与钩子。因此,我决定自己使用woocommerce_new_order检查新订单,并进行几次检查,以确保新订单来自移动的机票,并且是正确的。

他们甚至在新顺序上设置了parent_id,但没有在旧顺序上设置将它们连接在一起。

我不确定如何从ticket_moved钩子访问新订单,或在woocommerce_new_order钩子中获取项目。

自WooCommerce 4.3.0以来,用于获取$order->get_items();的正确钩子是woocommerce_checkout_order_created

function after_order_placed( $order ) {
foreach ( $order->get_items() as $item_id => $item ) {
$custom_meta = $item->get_meta('Custom Key');

}
}
add_action( 'woocommerce_checkout_order_created', 'after_order_placed' );

此钩子位于WC_Checkout类的create_order()方法中。

注意:此代码不适用于通过admin手动创建的订单。

最新更新