在WooCommerce中,我使用挂钩在woocommerce_thankyou
动作挂钩中的自定义函数,在付款完成后执行一些代码。钩子工作,但似乎我无法得到订单。
这是简化的代码。根据它的外观$order
找不到:
add_action( 'woocommerce_thankyou', 'afterorder', 10, 1 );
function afterorder($order_id) {
//$order = new WC_Order($order_id);
$order = wc_get_order($order_id);
$order_items = $order->get_items();
$order_comment_list = explode('\n', $order->customer_message);
$payment_method = $order->payment_method_title;
foreach( $order_items as $product ) {
$order->add_order_note('order for '.$product['name'].' received', false);
}
}
我在这里缺少什么?
答案 0 :(得分:1)
自WooCommerce 3+以来,您的代码已经过时并且有一些错误。订单订单项现在是 WC_Order_Item_Product
类对象。
对于订单"订单项"您需要使用 WC_Order_Item_Product
可用方法来获取相关数据,例如相应的产品标题:
add_action( 'woocommerce_thankyou', 'afterorder', 10, 1 );
function afterorder( $order_id ) {
// The WC_Order object
$order = wc_get_order($order_id);
$order_comment_list = explode( '\n', $order->get_customer_note() ); // Changed
$payment_method = $order->get_payment_method_title(); // Changed
foreach( $order->get_items() as $line_item ) {
// The WC_Product object
$product = $line_item->get_product(); // Added
$note = 'order for '.$product->get_title().' received';// Changed
$order->add_order_note( $note, false );
}
}
代码放在活动子主题(或活动主题)的function.php文件中或任何插件文件中。
您应该检查WC_Order
方法add_order_note()
,看看您是否正确设置了它。