为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 woocommerce_checkout_create_

如何在 woocommerce_checkout_create_

PHP
慕侠2389804 2021-10-22 15:24:19
下面是我的功能。但是我似乎在任何页面上都看不到我的回声。function add_qr_number_to_order_item( $item, $cart_item_key, $values, $order ) {    if ( is_user_logged_in() ) {        $user = wp_get_current_user();        $user_id = $user->ID;        $qr_code = generate_qr_number($user_id);        $item->add_meta_data( 'qr_code', $qr_code );        echo "QR: " . $qr_code;     } else {        wp_redirect( wp_login_url() );    }}add_action( 'woocommerce_checkout_create_order_line_item', 'add_qr_number_to_order_item', 10, 4 );
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

更新 1


1) 这个钩子不是用来显示任何东西或重定向用户的,它是用来保存(或改变)订单行项目元数据......

所以你最好在你的情况下使用钩子woocommerce_checkout_create_order来添加基于用户 ID 的二维码,作为订单元数据...


2)为了获得用户ID的使用$order->get_user_id() (如果用户ID是0用户不能登录和其他被登录)。


假设您的自定义函数generate_qr_number()有效,正确的代码应该是:


add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_qr_code', 10, 2 );

function save_order_item_qr_code( $item, $cart_item_key, $values, $order ) {

    $user_id = (int) $order->get_user_id();


    if ( $user_id > 0 ){

        $qr_code = generate_qr_number($user_id);

        $order->update_meta_data( 'qr_code', $qr_code );

    }

}

要检查二维码是否已保存,您可以使用以下命令在管理订单编辑页面中显示它:


add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_qr_code_to_order_admin', 10, 1 );

function display_qr_code_to_order_admin( $order ){

    if( $qr_code = $order->get_meta('qr_code') ){

        echo '<div class="qr-code">

        <table cellpadding="0" cellspacing="0" border="0" style="margin-top:6px;">

        <tr><th align="left">'.__('QR Code').':&nbsp;</th><td>&nbsp;' . $qr_code . '</td></tr>

        </table></div>';

    }

}

代码位于您的活动子主题(或活动主题)的 functions.php 文件中。它应该工作。


更新 2


要为您应该使用的每个订单项目保存它(假设该generate_qr_number()功能有效):


add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_qr_code', 10, 4 );

function save_order_item_qr_code( $item, $cart_item_key, $values, $order ) {

    $user_id = (int) $order->get_user_id();


    if ( $user_id > 0 ){

        $qr_code = generate_qr_number($user_id);

        $item->update_meta_data( 'Qr code', $qr_code );

    }

}


查看完整回答
反对 回复 2021-10-22
  • 1 回答
  • 0 关注
  • 234 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信