カスタムチェックアウトフィールドは最初の注文時には機能しますが、同じ顧客からの連続注文には表示されません。Woocommerceチェックアウトのカスタムフィールドが連続注文では機能しません
簡単に言えば、私はカード番号であるカスタムフィールドを持っています。顧客登録時に、顧客が買い物カードを取得したいかどうかを尋ねられる。顧客がオプションにフラグを立てると、 "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テーブル)ではそれ以上の情報は保存されません。フィールド値で注文メタを更新するコードはほとんど使用できません。そこには保存されていないため、オーダー編集ページや注文電子メールには表示されません。
私は、 "update order meta"セクションで書いたコードは、$ _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);
}
}
どのようなご提案ですか?どうもありがとうございました!!