在付款流程之前,在结帐页面中获取订单ID

时间:2017-04-10 06:55:04

标签: php wordpress woocommerce checkout hook-woocommerce

在WooCommerce中,我需要在WooCoommerce的结帐页面右侧 order ID 付款前,订单创建时

我会查看所有会话,并尝试在 order_awaiting_payment 会话中了解订单何时付款,但在付款之前我需要它。
因此,我考虑一个解决方案,即在加载结帐页面时进行订购(事实上已准备好付款),并在结帐时真正完成更新。

如何在订单前在WooCommerce中付款时在结帐页面获取订单ID?

我认为这有一些钩子,但我找不到它。

3 个答案:

答案 0 :(得分:5)

您可以使用挂钩在woocommerce_checkout_order_processed动作挂钩中的自定义函数。
自woocommerce 3.0+版本开始,这里的相应核心代码位于process_checkout()函数。

// Since WooCommerce version 3.0+
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );

及以下WooCommerce 3.0版本:

// Since WooCommerce version 2.1+ (before version 3.0+)
do_action( 'woocommerce_checkout_order_processed', $order_id, $this->posted );

因此有两种情况取决于您使用的是哪种版本的woocommerce:

  

自WooCommerce 3.0 + 以来,你可以在你的钩子函数中使用2个额外的参数,当你得到时,你不需要创建订单对象的实例 $order 已作为论据   您还可以通过 $posted_data 参数直接访问发布的数据。

add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 3);
function action_checkout_order_processed( $order_id, $posted_data, $order ) {
   // Do something
}
  

自从WooCommerce 2.1 + (在WooCommerce 3.0之前)之后,您只有 $order_id 作为参数,所以您可能是需要使用wc_get_order()函数获取 $order 对象的实例:

add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 1);
function action_checkout_order_processed( $order_id ) {
   // get an instance of the order object
   $order = wc_get_order( $order_id );

   // Do something
}

代码进入活动子主题(或主题)的function.php文件或任何插件文件中。

答案 1 :(得分:1)

很遗憾,由于尚未创建订单,因此您无法在结帐页面上访问order_id。尽管这是事实,但WooCommerce称其为购物车数据时将其临时保存为“会话”。如果您可以进行一些调整,则可以将信息传递给iFrame可能会对您有所帮助。

您可以通过从WC_session获取信息来做到这一点:

$cart_data = WC()->session->get('cart');

执行此操作后,您将可以使用诸如'product_id'之类的键索引来访问WooCommerce存储的购物车数据层次结构:

$cart_data[array_keys($cart_data)[0]]['product_id'];

以下是有效的购物车数据键的列表:


product_id
variant_id
变化(数组)
数量
data_hash
line_tax_data(Array)
line_subtotal
line_subtotal_tax
line_total
line_tax

答案 2 :(得分:0)

如果您只是查看第935行的class-wc-checkout.php文件,您会看到有一个动作woocommerce_checkout_order_processed$order_id作为参数传递。

所以这对你有用:

add_action('woocommerce_checkout_order_processed', 'wh_pre_paymentcall');

function wh_pre_paymentcall($order_id) {

    //create an order instance
    $order = wc_get_order($order_id);
    //$payment_method = $order->payment_method_title;
    //$status = $order->get_status();

    // write your custom logic over here.
}

代码进入您的活动子主题(或主题)的functions.php文件。或者也可以在任何插件php文件中。

相关问题:WooCommerce Get Order Product Details Before Payment in Plugin (也阅读评论)

希望这有帮助!