【问题标题】:woocommerce_payment_complete fires after order received page is already shownwoocommerce_payment_complete 在收到订单页面已显示后触发
【发布时间】:2021-06-02 15:54:03
【问题描述】:

我正在尝试将会员卡集成到 WooCommerce 网上商店。订单完成后,我调用他们的 API 来生成忠诚度积分,并将令牌存储在订单的元标记中。 在订单确认页面和电子邮件中,我想使用存储在元标记中的令牌显示忠诚度积分的二维码。

一切正常,除了在生成令牌之前显示确认页面,因此无法显示二维码。

  1. 我使用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 );
    }
}
  1. order-details.php 模板中,我添加了此代码以加载并显示二维码(与确认电子邮件相同。
$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尚未设置。如果我重新加载确认页面,则会显示 QR 码,因为此时会生成并存储令牌。

我应该使用其他操作来代替woocommerce_payment_complete 吗?或者有没有办法仅在此操作完成后显示确认页面?

【问题讨论】:

    标签: php wordpress woocommerce metadata hook-woocommerce


    【解决方案1】:

    您可以改用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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2019-12-11
      相关资源
      最近更新 更多