在WooCommerce中,我需要在WooCoommerce的结帐页面右侧 order ID
,付款前,订单创建时
我会查看所有会话,并尝试在 order_awaiting_payment
会话中了解订单何时付款,但在付款之前我需要它。
因此,我考虑一个解决方案,即在加载结帐页面时进行订购(事实上已准备好付款),并在结帐时真正完成更新。
如何在订单前在WooCommerce中付款时在结帐页面获取订单ID?
我认为这有一些钩子,但我找不到它。
答案 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 (也阅读评论)
希望这有帮助!