WordPressを簡単にECサイトにできるプラグインである、WooCommerceのお客様情報に追加でカスタムフィールドを加えた時の備忘録です。

下記をfunctions.phpに追記するとユーザーの性別・誕生日・趣味を追加することができます。

functinos.php

[code language=”php”]
// 新規登録画面とユーザ情報にフォームを追加する

add_action( ‘woocommerce_edit_account_form’, ‘my_woocommerce_edit_account_form’ );
add_action( ‘woocommerce_register_form’, ‘online_add_user_form’ );
function my_woocommerce_edit_account_form() {

$user_id = get_current_user_id();
$user = get_userdata( $user_id );
if ( !$user )
return;
$gender = get_user_meta( $user_id, ‘gender’, true ); //ユーザー性別
$birthday = get_user_meta( $user_id, ‘birthday’, true ); //ユーザー誕生日
$hoby = get_user_meta( $user_id, ‘hoby’, true ); //趣味
?>
<fieldset>
<legend>ユーザー追加情報</legend>
<p class="form-row form-row-thirds">
<label for="gender">性別</label>
<select name="gender" value="<?php echo esc_attr( $gender ); ?>" class="input-gender" >
<option value="<?php echo esc_attr( $gender ); ?>"><?php echo esc_attr( $gender ); ?></option>
<option value="男性">男性</option>
<option value="女性">女性</option>
<option value="不確定">不確定</option>
</select>
</p>
<p class="form-row form-row-thirds">
<label for="birthday">誕生日</label>
<input type="date" name="birthday" value="<?php echo esc_attr( $birthday ); ?>" class="input-birthday" />
</p>
<p class="form-row form-row-thirds">
<label for="hoby">趣味</label>
<input type="text" name="hoby" v-model="selected" value="<?php echo esc_attr( $hoby ); ?>" class="input-hoby" />
</p>
</fieldset>

<?php
} // end function

// 新規登録画面とユーザ情報の変更時にDBへ保存

add_action( ‘woocommerce_save_account_details’, ‘my_woocommerce_save_account_details’ );
add_action( ‘woocommerce_created_customer’, ‘my_woocommerce_save_account_details’ );
function my_woocommerce_save_account_details( $user_id ) {

update_user_meta( $user_id, ‘gender’, htmlentities( $_POST[ ‘gender’ ] ) ); //ユーザー性別
update_user_meta( $user_id, ‘birthday’, htmlentities( $_POST[ ‘birthday’ ] ) ); //ユーザー誕生日
update_user_meta( $user_id, ‘hoby’, htmlentities( $_POST[ ‘hoby’ ] ) ); //趣味
} // end function

[/code]

注意点

通常のWordPressユーザーにカスタムフィールドを追加する実装は過去におこなったことがあったのですが、WooCommerceのアクションフックがよくわからず手間取りました。
新規作成の時とマイアカウントからWooCommerceのお客様情報を変更する時の両方に反映するために、フォーム追加時には “woocommerce_edit_account_form” と “woocommerce_register_form” をフックを追加し、保存時には “woocommerce_save_account_details” と “woocommerce_created_customer” の両方を加えました。