Hook woocommerce_thankyou没有收到订单

时间:2017-11-30 15:20:30

标签: php wordpress woocommerce product orders

在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);
    }
}

我在这里缺少什么?

1 个答案:

答案 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(),看看您是否正确设置了它。