この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレスのユーザープロフィールをカスタマイズする その1 項目の追加と削除

ワードプレスには会員登録機能があり、ユーザー登録するとログインができます。
ログイン後にダッシュボード(管理画面)を見るとおそらくはプロフィールがトップ画面になっていると思います。

ユーザープロフィール

プロフィールを見るとさすが海外で作られたものだけあって「AIM」とか「Jabber / Google Talk」といった日本ではあまり馴染みのない項目があります。
こういった使わない項目は削除して、新しい項目を追加するにはどうすればいいのでしょうか?
特にワードプレス関係の仕事をしていて、カスタマイズしたワードプレスをクライアントに納品する場合は、色々といじりたいものです。

ワードプレスのユーザープロフィールはカスタマイズできます。
会員サイトを作りたい場合は独自の項目を追加したいですよね。
メルマガの登録/解除ボタンやポイントの残高なんていうのもあったら追加したいものです。

今回は練習としてプロフィール欄の不要な項目を削除し、必要な項目を追加してみましょう。
この削除と追加のコードはどこに書くかというとテーマフォルダの中にある「functions.php」に書きます。
書き方はたったこれだけです。フィルターフックを使って書きます。

//「user_contactmethods」をカスタマイズする/////////////////////
add_filter( 'user_contactmethods' , 'CHANGE_USER_PROFILE_FILED' , 10 , 1 );
//ユーザープロフィールの不要な項目を削除し、必要な項目を追加する////////////////
function CHANGE_USER_PROFILE_FILED( $profile )
{

	//必要な項目を$profile配列に追加
	$profile[ 'phone' ]		= '電話番号';
	$profile[ 'zip1' ] 		= '郵便番号 上3ケタ';
	$profile[ 'zip2' ] 		= '郵便番号 下4ケタ';

	$profile[ 'address1' ] 	= '住所1(都道府県)';
	$profile[ 'address1' ] 	= '住所2(市郡町村)';
	$profile[ 'address1' ] 	= '住所3(番地)';

	$profile[ 'twitter' ] 	= 'twitter';
	$profile[ 'facebook' ] 	= 'facebook';


	//不要な項目を$profile配列から削除
	unset( $profile[ 'aim' ] );
	unset( $profile[ 'jabber' ] );
	unset( $profile[ 'yim' ] );

	//配列を戻す
	return $profile;
}

これでフィルターフック「user_contactmethods」が実行される時に独自関数「CHANGE_USER_PROFILE_FILED」が実行されてプロフィールをカスタマイズできます。

フィルターフックとはなにかですが、これはワードプレスの表示を加工するためのフックです。
ワードプレスにはフィルターフックとアクションフックがあってどっちがなんなのか分かり辛いですが、簡単に説明すると表示に関わるものがフィルターフックで、タイミングに関わるものがアクションフックです。

例えば、記事本文を抜粋する機能はフィルターフックが使われています。
例えば、記事ボタンを押したら記事を投稿するという機能はアクションフックが使われています。

今回はユーザープロフィールの見た目(表示)を変更するのでフィルターフックを使っています。
因みにボタンを押してプロフィールの変更が行われた時は、ボタンを押したというタイミングなのでアクションフックを使います。

フックというのは引っ掛けるという意味で、処理の途中に引っ掛けて割り込むことを意味します。
ユーザープロフィールの見た目を処理する「user_contactmethods」はなにもしなければ通常に表示されますが、途中で処理に割り込んで、追加したり削除したりできるというわけです。

フィルターフックとアクションフックは何でもかんでもできるというわけでなくて、できることが決まっています。
どういったことができるかはワードプレスのCodexに載っています。

▼フィルターフック一覧 Codex

「add_filter()」関数の使い方ですが、以下のようになっています。

add_filter( 'フック名' , '実行する関数名' , 優先順位1~999 , 引数の数 );

引数を4つとりますが、第一引数と第二引数は分かると思います。
第三引数の「優先順位1~999」というのは、フィルターフックが呼び出される優先順位です。
(999というのは9999でも多分いいと思うのですが、Codexにはいくつまで指定できるか書いていないので数字が大きければ大きいほど優先順位は下がります)

フィルターフックは他の処理からも利用されていることがありますが、その時に優先順位があれば1~999で指定します。10以上にすると遅く実行されます。省略すると10を指定したことになります。
ユーザープロフィールをカスタマイズする処理は優先順位がまったく高くないので10としておきます。

「引数の数」というのは「実行する関数名」に渡す引数の数です。
「user_contactmethods」からは項目の入った配列が1つ渡されるので1と記述しておきます。
必要な引数の数はフィルターフックによって異なります。
基本的にフィルターフックは引数を加工して戻す処理なので、必ず1以上は指定することになります。
(日本語訳で説明ページがまだ作られていないフィルターフックもあって不便……)

▼フィルターフック関数の使い方 Codex

さて、上記を「functions.php」に追加するとどうなるかというとこうなります。

ユーザープロフィールをカスタマイズ
ユーザープロフィールをカスタマイズ

面白いのは上記の処理だけでちゃんと項目が表示されて、しかもボタンを押すと保存されることです。
自動でやってくれるんですね。

ユーザー情報というのはデータベースの「wp_usermeta」に保存されています。
以下のような場合は「wp_usermeta」「meta_key」カラムに「phone」というキーが登録されて、その項目名を表す「電話番号」が保存されるようになります。

//必要な項目を$profile配列に追加
$profile[ 'phone' ] = '電話番号';

あとはユーザーが入力した値を自動的に保存してくれるというわけです。
ただし、いくつか問題があります。フィルターフックの「user_contactmethods」は簡単に項目の追加と削除ができるのですが、フォームはテキストフィールドに限られてしまうことです。
都道府県などはプルダウンメニューで一覧から選択したいものです。
あと入力された値に制約を設けて間違っていたら登録できない、というトラップも仕込んでみたいのですが、これは「user_contactmethods」ではできないんですね。

関連記事