Ниже моя функция. Но я не вижу своего эха ни на одной странице.
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 );
🤔 А знаете ли вы, что...
PHP предоставляет множество инструментов для отладки кода, таких как Xdebug.
Обновление 1
1) Этот хук не предназначен для отображения чего-либо или перенаправления пользователя, он предназначен для сохранения (или изменения) метаданных позиции заказа…
Поэтому вам лучше использовать вместо этого в вашем случае хук woocommerce_checkout_create_order
, чтобы добавить QR-код на основе идентификатора пользователя, как метаданные заказа…
2) Чтобы получить идентификатор пользователя, используйте $order->get_user_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 );
}
}
Чтобы проверить, сохранен ли QR-код, вы можете использовать следующее, чтобы отобразить его на страницах редактирования заказа администратора:
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 );
}
}