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手动创建的订单。