如何回显 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').': </th><td> ' . $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 );
}
}
下面是我的函数。但是我似乎在任何页面上都看不到我的回声。
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').': </th><td> ' . $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 );
}
}