钩woocommerce_checkout_order_processed订单项问题

时间:2020-10-06 05:20:27

标签: php wordpress woocommerce hook-woocommerce orders

我正在从事WooCommerce项目。我需要在自定义表中添加一些基于订购商品的条目。如果用户订购了3件物品,那么这3个条目将与一些数据一起放置在我的自定义表格中。

为此,我使用了woocommerce_checkout_order_processed钩子。但是我遇到了一些问题,如果用户在购物车中和结帐页面上添加了4个项目,如果用户删除了除一个项目之外的所有项目,最后只订购了1个项目,那么在这个挂钩中,我将获得全部4个项目。我没有在这个挂钩中得到最终订购的物品。

因此,我将钩子更改为woocommerce_thankyou。但是在某些情况下,由于某种原因,用户没有进入“感谢页面”或某些信用卡付款,此挂钩无效

所以任何人都可以告诉我最好的挂钩,无论是否付款,该挂钩都可以在订购后运行,我也应该只得到订购的物品。我的WooCommerce版本是3 +

代码:

function wc_function($order_id) {
    global $wpdb;
    $order = new WC_Order($order_id);
    $items = $order->get_items();
    foreach ($items as $item_line_id => $item) {
        // Insert data in my custom table
    }
}
//add_action('woocommerce_checkout_order_processed','wc_function', 10, 3);
//add_action('woocommerce_thankyou', 'wc_function', 10, 1);

谢谢!

1 个答案:

答案 0 :(得分:2)

do_action上的

woocommerce_checkout_order_processed恰好传递了三个参数,其中三个是$order本身。因此,请尝试使用它:

function wc_function($order_id, $posted_data, $order) {
    $items = $order->get_items();
    foreach ($items as $item_line_id => $item) {
        // Insert data in my custom table
    }
}
相关问题