我有一個自定義結賬場當第一順序交鋒它的作品,但不會出現在由同一客戶提出訂單連續的艱難時期工作。自定義新的領域不連續訂單
概括地說,我有一個自定義字段這是一個卡號。在客戶註冊時,詢問客戶是否想購買購物卡。如果客戶標記選項,則將具有「y」的字段添加到user_meta表中。然後,店主將通過電子郵件發送給客戶的卡號。
在客戶提出的第一份訂單,在格蘭結帳頁面會出現一個CARD_NUMBER自定義字段:客戶必須通過添加店鋪獲得的卡號。該命令隨即顯示卡號(它工作),卡號也保存在user_meta表中。
這裏緊跟我用於檢驗過程的代碼:
/**
* Add the field to the checkout
*/
add_action ('woocommerce_after_order_notes', 'checkout_w55_card_number');
function checkout_w55_card_number($checkout) {
//extracts the value of the w55_card_number field
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
//condition is the w55_card_number field is empty or not
if (!empty($w55_card)) : echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2><div style="padding:15px; background-color: #FCFCFC; border: 1px solid #efccb9"><p>' .$w55_card . '</p></div></div>';
else :
echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2>';
woocommerce_form_field('w55_card_number', array(
'type' => 'text',
'class' => array('w55-card-number-class form-row-wide'),
'label' => __('Inserisci n. tessera W55'),
'placeholder' => __('Inserisci numero'),
), $checkout->get_value('w55_card_number'));
echo '</div>';
endif;
}
/**
* Update the order meta with field value
*/
add_action('woocommerce_checkout_update_order_meta', 'w55_card_number_update_order_meta');
function w55_card_number_update_order_meta($order_id) {
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
if (!empty($_POST['w55_card_number'])) {
update_post_meta($order_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
}
/**
* Update the user meta with W55 number if filled
*/
function w55_card_number_woocommerce_checkout_update_user_meta($customer_id) {
if (! empty($_POST['w55_card_number'])) {
update_user_meta($customer_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
}
add_action('woocommerce_checkout_update_user_meta', 'w55_card_number_woocommerce_checkout_update_user_meta', 10, 2);
/**
* Display field value on the order edit page
*/
add_action('woocommerce_admin_order_data_after_billing_address', 'w55_card_number_checkout_field_display_admin_order_meta', 10, 1);
function w55_card_number_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('w55_card_number').':</strong> ' . get_post_meta($order->id, 'w55_card_number', true) . '</p>';
}
正如我之前所說的,一切正常,第一批訂單。然而,當同一客戶回到網上商店併購買其他東西時,問題就會存在。在結帳區域的位置出現卡號,但是新訂單(post_meta表)中的IT沒有更多的保存:用字段值更新訂單元的代碼不再適用。由於它沒有保存在那裏,它並沒有出現在訂單編輯頁面,也沒有出現在訂單電子郵件中。
我想,我的「更新訂單薈萃」一節中寫的代碼只需要它通過$ _ POST到達值。因此,我嘗試添加以下條件,它應該從user_id元表中取值,但仍然無效。
/**
* Update the order meta with field value
*/
add_action('woocommerce_checkout_update_order_meta', 'w55_card_number_update_order_meta');
function w55_card_number_update_order_meta($order_id) {
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
if (!empty($_POST['w55_card_number'])) {
update_post_meta($order_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
elseif (!empty ($card_number))
{
update_post_meta($order_id, 'w55_card_number', $card_number, false);
}
}
有什麼建議嗎?非常感謝你!!