2017-03-20 4 views
1

注文時に読み取り専用(または不可視)であらかじめ入力して固定されたチェックアウトプロセスに確認コードを追加します。 お客様は注文を確認するためにこのコードが必要です。チェックアウトに非表示のフィールドを追加して注文処理

私はwoocommerce_checkout_fieldsフィルタで課金フィールドにカスタムアレイを追加します。

//VID 
$fields['billing']['billing_vid'] = array( 
'label'  => __('', 'woocommerce'), 
'placeholder' => _x('', 'placeholder', 'woocommerce'), 
'required' => false, 
'type'  => 'text', 
'class'  => array('form-row-wide'), 
'clear'  => false, 
'default' => wp_rand(10000,99999) 
); 

これは動作しますが、お客様がまだチェックアウトプロセス中にフィールドの内容を書くことができます。

誰かが私のための解決策を持っていますか?ここで

おかげ

答えて

3

は、あなたが期待しているだけのように、より完全な解決策になることができます:

// Outputting the hidden field in checkout page 
add_action('woocommerce_after_order_notes', 'add_custom_checkout_hidden_field'); 
function add_custom_checkout_hidden_field($checkout) { 

    // Generating the VID number 
    $vid_number = wp_rand(10000,99999); 

    // Output the hidden field 
    echo '<div id="user_link_hidden_checkout_field"> 
      <input type="hidden" class="input-hidden" name="billing_vid" id="billing_vid" value="' . $vid_number . '"> 
    </div>'; 
} 

// Saving the hidden field value in the order metadata 
add_action('woocommerce_checkout_update_order_meta', 'save_custom_checkout_hidden_field'); 
function save_custom_checkout_hidden_field($order_id) { 
    if (! empty($_POST['billing_vid'])) { 
     update_post_meta($order_id, '_billing_vid', sanitize_text_field($_POST['billing_vid'])); 
    } 
} 

// Displaying "Verification ID" in customer order 
add_action('woocommerce_order_details_after_customer_details', 'display_verification_id_in_customer_order', 10); 
function display_verification_id_in_customer_order($order) { 

    echo '<p class="verification-id"><strong>'.__('Verification ID', 'woocommerce') . ':</strong> ' . get_post_meta($order->id, '_billing_vid', true) .'</p>'; 
} 

// Display "Verification ID" on Admin order edit page 
add_action('woocommerce_admin_order_data_after_billing_address', 'display_verification_id_in_admin_order_meta', 10, 1); 
function display_verification_id_in_admin_order_meta($order) { 
    echo '<p><strong>'.__('Verification ID', 'woocommerce').':</strong> ' . get_post_meta($order->id, '_billing_vid', true) . '</p>'; 
} 

// Displaying "Verification ID" on email notifications 
add_action('woocommerce_email_customer_details','add_verification_id_to_emails_notifications', 15, 4); 
function add_verification_id_to_emails_notifications($order, $sent_to_admin, $plain_text, $email) { 

    $output = ''; 
    $billing_vid = get_post_meta($order->id, '_billing_vid', true); 

    if (!empty($billing_vid)) 
     $output .= '<div><strong>' . __("Verification ID:", "woocommerce") . '</strong> <span class="text">' . $billing_vid . '</span></div>'; 

    echo $output; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルまたはまたに行きます任意のプラグインファイル。

このコードはテスト済みであり、動作します。

+0

。 これはうまく動作します、ありがとう! – Marv

0

偉大な答え!非常に参考になりました...しかし、私のログにはエラーがありました:

IDはと間違っていましたです。 $billing_vid = get_post_meta($order->id, '_billing_vid', true); へ:$billing_vid = get_post_meta($order->get_id(), '_billing_vid', true);

この記事によると:オーダーのプロパティは直接

変更はアクセスしないでくださいOrder properties should not be accessed directly - WooCommerce 3.0私が探しています正確に何である

関連する問題