如何回显 woocommerce_checkout_create_order_line_item 中的变量?

How to echo a variable in woocommerce_checkout_create_order_line_item?

下面是我的函数。但是我似乎在任何页面上都看不到我的回声。

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

1) 这个挂钩不是为了显示任何东西或重定向用户,而是为了保存(或改变)订单行项目 元数据…
因此,在您的情况下,您最好使用挂钩 woocommerce_checkout_create_order 来添加基于用户 ID 的 QR 码,作为订单元数据……

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 );
    }
}