2016-11-05 28 views
0

我有一個自定義結賬場當第一順序交鋒它的作品,但不會出現在由同一客戶提出訂單連續的艱難時期工作。自定義新的領域不連續訂單

概括地說,我有一個自定義字段這是一個卡號。在客戶註冊時,詢問客戶是否想購買購物卡。如果客戶標記選項,則將具有「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); 
    } 
} 

有什麼建議嗎?非常感謝你!!

回答

0

我只是找到了解決我的問題。如果這可能對別人有幫助,我在此解釋我做了什麼。

其實我場w55_card_number在一個簡單的<p>標籤的到來,因此它可能是不可能的推斷它。我創建了一個<input>領域,一切運行良好

我取代以下行

//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>'; 

這一行

//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"><input type="text" class= "input-w55_card_number" name="w55_card_number" id = "w55_card_number" value=" ' .$w55_card . ' " readonly/></div></div>';