2016-11-14 17 views
1

私は同様の質問を見ましたが、解決策を見つけることができませんでした。WooCommerce登録フォームにカスタムフィールドを追加する方法

私はWooCommerce登録フォームにカスタムフィールドを追加しようとしています。具体的には、姓名フィールドです。私はこれらのフィールドを作成することができましたが、ユーザーがログインしたときに入力された情報はAccount Detailsページに渡されませんでした。他のチュートリアルではフィールドの検証は記載されていましたが、私はWordpressの子供のテーマに取り組んでいます。

コードを表示するにはcodepad .orgにアクセスしてください。 コードサンプルオプションを使用してここにコードを貼り付けようとしましたが、正しく機能しません。

私は自分自身をはっきりと説明しました。そうでない場合は、私に知らせてください。私は明確にします。

答えて

4
私はあなたが woocommerce/templates/myaccount/form-login.phpテンプレートを上書き持っていると思う

ため、このプラグインを使用することができ、それを行うことで、billing_first_namebilling_last_nameを表示することができましたこれらのデータをデータベースに保存するのに必要なフックwoocommerce_created_customerを使用することを忘れてしまいます。私がお勧めでしょう何

は、あなたがそれがあるように、テンプレートを維持し、ここでfunction.php

を通じて、これらのフィールドを追加することであるWooCommerce登録フォームにカスタムフィールドを追加するコードは次のとおりです。に来て

/** 
* To add WooCommerce registration form custom fields. 
*/ 

function text_domain_woo_reg_form_fields() { 
    ?> 
    <p class="form-row form-row-first"> 
     <label for="billing_first_name"><?php _e('First name', 'text_domain'); ?><span class="required">*</span></label> 
     <input type="text" class="input-text" name="billing_first_name" id="billing_first_name" value="<?php if (!empty($_POST['billing_first_name'])) esc_attr_e($_POST['billing_first_name']); ?>" /> 
    </p> 
    <p class="form-row form-row-last"> 
     <label for="billing_last_name"><?php _e('Last name', 'text_domain'); ?><span class="required">*</span></label> 
     <input type="text" class="input-text" name="billing_last_name" id="billing_last_name" value="<?php if (!empty($_POST['billing_last_name'])) esc_attr_e($_POST['billing_last_name']); ?>" /> 
    </p> 
    <div class="clear"></div> 
    <?php 
} 

add_action('woocommerce_register_form_start', 'text_domain_woo_reg_form_fields'); 

あなたの質問の2番目の部分は、それは完全にオプションであり、あなたのビジネスロジックに依存しますが、一般的にほとんどのサイトには名前と姓が必要ですが、もう一度それは完全にあなたに依存します。これを検証し、上記のコードから<span class="required">*</span>を削除し、これをスキップする セクション。

/** 
* To validate WooCommerce registration form custom fields. 
*/ 
function text_domain_woo_validate_reg_form_fields($username, $email, $validation_errors) { 
    if (isset($_POST['billing_first_name']) && empty($_POST['billing_first_name'])) { 
     $validation_errors->add('billing_first_name_error', __('<strong>Error</strong>: First name is required!', 'text_domain')); 
    } 

    if (isset($_POST['billing_last_name']) && empty($_POST['billing_last_name'])) { 
     $validation_errors->add('billing_last_name_error', __('<strong>Error</strong>: Last name is required!.', 'text_domain')); 
    } 
    return $validation_errors; 
} 

add_action('woocommerce_register_post', 'text_domain_woo_validate_reg_form_fields', 10, 3); 

さて、これはあなたがコードがカスタムデータを保存するために必要とされるの下に、見逃していたたものを主要部分と、このです:

/** 
* To save WooCommerce registration form custom fields. 
*/ 
function text_domain_woo_save_reg_form_fields($customer_id) { 
    //First name field 
    if (isset($_POST['billing_first_name'])) { 
     update_user_meta($customer_id, 'first_name', sanitize_text_field($_POST['billing_first_name'])); 
     update_user_meta($customer_id, 'billing_first_name', sanitize_text_field($_POST['billing_first_name'])); 
    } 
    //Last name field 
    if (isset($_POST['billing_last_name'])) { 
     update_user_meta($customer_id, 'last_name', sanitize_text_field($_POST['billing_last_name'])); 
     update_user_meta($customer_id, 'billing_last_name', sanitize_text_field($_POST['billing_last_name'])); 
    } 
} 

add_action('woocommerce_created_customer', 'text_domain_woo_save_reg_form_fields'); 

すべて上記のコードは、あなたのアクティブのfunction.phpファイルに行きます子供のテーマ(またはテーマ)。また、任意のプラグインのPHPファイルにもあります。
コードはテストされ、完全に機能します。
これが役立つことを願っています!

関連する問題