WooCommerceでお客様情報にカスタムフィールドを追加する時の注意点


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

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

functinos.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

注意点

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です