woocommerce_payment_complete 在已显示订单接收页面后触发
woocommerce_payment_complete fires after order received page is already shown
我正在尝试将会员卡集成到 WooCommerce 网上商店中。订单完成后,我调用他们的 API 来生成忠诚度积分,并将令牌存储在订单的元标记中。
在订单确认页面和电子邮件中,我想使用元标记中存储的令牌显示忠诚度积分的二维码。
一切正常,除了在生成令牌之前显示确认页面,因此无法显示二维码。
- 我使用
woocommerce_payment_complete
操作创建令牌。
add_action( 'woocommerce_payment_complete', 'get_loyalty_token');
function get_loyalty_token( $order_id ){
$order = wc_get_order( $order_id );
if ( $order ) {
$total = $order->get_total();
$loyalty= new Loyalty();
$loyalty->create_code( $total, 'webshop-' . $order->get_id() );
$token = $loyalty->get_token() ?: '';
add_post_meta( $order->get_id(), 'meta_loyalty_token', $token );
}
}
- 在
order-details.php
模板中,我添加了此代码以加载和显示 QR 码(与确认电子邮件相同。
$token = get_post_meta( $order->get_id(), 'meta_loyalty_token', TRUE);
$loyalty= new Loyalty();
$loyalty->get_code($token);
echo $loyalty->html_block();
显示订单确认时,没有二维码,因为meta_loyalty_token
还没有设置。如果我重新加载确认页面,则会显示二维码,因为到那时,令牌已生成并存储。
我应该使用其他操作来代替 woocommerce_payment_complete
吗?或者有没有办法只有在这个操作完成后才显示确认页面?
您可以改用 woocommerce_checkout_update_order_meta
挂钩。
所以你得到:
/**
* Action hook fired after an order is created used to add custom meta to the order.
*
* @since 3.0.0
*/
function action_woocommerce_checkout_update_order_meta( $order_id, $data ) {
// Get $order object
$order = wc_get_order( $order_id );
// Is a WC_Order
if ( is_a( $order, 'WC_Order' ) ) {
// Get total
$total = $order->get_total();
$loyalty = new Loyalty();
$loyalty->create_code( $total, 'webshop-' . $order_id );
$token = $loyalty->get_token();
// Update meta
update_post_meta( $order_id, 'meta_loyalty_token', $token );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 2 );
我正在尝试将会员卡集成到 WooCommerce 网上商店中。订单完成后,我调用他们的 API 来生成忠诚度积分,并将令牌存储在订单的元标记中。 在订单确认页面和电子邮件中,我想使用元标记中存储的令牌显示忠诚度积分的二维码。
一切正常,除了在生成令牌之前显示确认页面,因此无法显示二维码。
- 我使用
woocommerce_payment_complete
操作创建令牌。
add_action( 'woocommerce_payment_complete', 'get_loyalty_token');
function get_loyalty_token( $order_id ){
$order = wc_get_order( $order_id );
if ( $order ) {
$total = $order->get_total();
$loyalty= new Loyalty();
$loyalty->create_code( $total, 'webshop-' . $order->get_id() );
$token = $loyalty->get_token() ?: '';
add_post_meta( $order->get_id(), 'meta_loyalty_token', $token );
}
}
- 在
order-details.php
模板中,我添加了此代码以加载和显示 QR 码(与确认电子邮件相同。
$token = get_post_meta( $order->get_id(), 'meta_loyalty_token', TRUE);
$loyalty= new Loyalty();
$loyalty->get_code($token);
echo $loyalty->html_block();
显示订单确认时,没有二维码,因为meta_loyalty_token
还没有设置。如果我重新加载确认页面,则会显示二维码,因为到那时,令牌已生成并存储。
我应该使用其他操作来代替 woocommerce_payment_complete
吗?或者有没有办法只有在这个操作完成后才显示确认页面?
您可以改用 woocommerce_checkout_update_order_meta
挂钩。
所以你得到:
/**
* Action hook fired after an order is created used to add custom meta to the order.
*
* @since 3.0.0
*/
function action_woocommerce_checkout_update_order_meta( $order_id, $data ) {
// Get $order object
$order = wc_get_order( $order_id );
// Is a WC_Order
if ( is_a( $order, 'WC_Order' ) ) {
// Get total
$total = $order->get_total();
$loyalty = new Loyalty();
$loyalty->create_code( $total, 'webshop-' . $order_id );
$token = $loyalty->get_token();
// Update meta
update_post_meta( $order_id, 'meta_loyalty_token', $token );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 2 );