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” の両方を加えました。

WP Instant Setupが新規起動しなくなったけど解決した話

いつも通り、新たに環境を構築しようとしたら下記のように表示されて環境を新規構築することができませんでした。

Warning: Unknown: failed to open stream: phar error: invalid url or non-existent phar "phar:///Users/susumu/Playground/wp-ja/bin/wp/vendor/wp-cli/server-command/router.php" in Unknown on line 0

Fatal error: Unknown: Failed opening required 'phar:///Users/susumu/Playground/wp-ja/bin/wp/vendor/wp-cli/server-command/router.php' (include_path='.:') in Unknown on line 0

問題は、開発版のWP-CLIを引っ張ってきているからだったぽい。
宮さんのGitHubのリポジトリからフォークして、WP-CLIを公開版をダウンロードしてくるように変更したらいつもどおりうごいた。 

該当のリポジトリはこちら
musus/wp-instant-setup: WordPress desktop installer

ちなみに宮さんのオリジナルからの変更点もいくつかあるので記載する。

  • デフォルトで日本語設定
  • 開発用にいつも使っているのプラグインをインストール・有効化
  • テーマテストユニットのインストール・インポート

WordPressの子テーマとベーステーマのスライド『はじめてテーマを作る、その前に』

WordBench山梨のモデレーターをしている、ナツミーヌのとても勉強になるスライドです。
ナツミーヌのスライドはいつもキレイで見やすいためスライド作成の勉強にもなるの、で忘れないように備忘録。

スライドではWordPressの子テーマという機能を使ってテーマを制作するメリットやデメリット、『_s (アンダースコアーズ) 』というスタータテーマ (ベーステーマ) を利用した制作の手法などが紹介されています。

ゼロからテーマを制作する時は僕もだいたい_Sを使うのですが、テンプレート構造だけを利用します。
全てを使いこなさなくても使えるところだけで使っていけいいと思います。

WordBench倉敷というものができたんだなー

『はじめてテーマを作る、その前に』

KUSANAGIでSSLの証明書が自動更新されなかった話『This log is frozen, no further entries may be added.』

# rootになる
sudo su -

# ターゲットを指定する
kusanagi target [プロファイル名]

# 証明書の更新
kusanagi update cert

がしかし『This log is frozen, no further entries may be added.』というエラーメッセージが表示されて、証明書の更新が失敗しているようです。

『困った時はエラーログをググる』

ということで、探していたら段田はんのブログを発見。

Let’s EncryptでCT aviatorサーバーが終了した影響でSSLエラーが発生したので対応した話 | 段田商会

ちょうど1週間前に一緒に飲んでいたのですが、その時に段田はんが話していた症状がこのブログで起きていたようです。

『This log is frozen, no further entries may be added.』の解決方法

表示されたエラーをちゃんと読んだわけではないのですが、KUSANAGIをアップデートして再度証明書を取得すればいいじゃないかと思い、とりあえずやっていました。

# yumで色々アップデート
yum update

# KUSANAGIを再起動
kusanagi restart

# 証明書の更新
kusanagi update cert

上記で無事に解決できました。
yumをアップデートしたあとすぐに証明書の更新をしたら、別のエラーメッセージが表示されたのですが、KUSANAGIを再起動した後に証明書の更新をしたら無事に復帰しました。

めでたし!

SEO YoastでPrimaryに設定したカテゴリー名を表示する

WordPressのSEOプラグインであるYoast SEO — WordPress Pluginsを利用したり、クライアントさんに「使いたい」と言われる事が多々あり、カテゴリーで複数選択した時にPrimaryを選択したものを表示したいという要望があったので、Primaryに選択されものを出力する方法の備忘録です。

<?php
	$cat = new WPSEO_Primary_Term('category', get_the_ID());
	$cat = $cat->get_primary_term();
?>