[WordPress]ユーザー登録時にカスタムフィールドの値を自動で挿入する方法
こんばんは、ゾノ( @ozonosho )です。
さて、今日のブログではWordPressでユーザー登録時にカスタムフィールドの値を自動で挿入する方法を紹介したいと思います。
それによってどんなことができるかというと、ユーザー登録時に自動でそのユーザー専用のアフィリエイトリンクを発行したり、初期機能では姓・名で分かれてしまっているユーザー名称をフルネームであわせて保存したりすることができます。
今回の実装にはWordpressの「フック」を利用するのですが、これがマジで便利で・・・もっと早く知っておけば良かったなと後悔していますw
ユーザー登録時にカスタムフィールドの値を自動で挿入する方法
実装は簡単で、下記の関数をfunctions.phpに追加してください。
function user_cf_set($user_id) { $val = '挿入したい値'; update_user_meta($user_id, 'カスタムフィールド名', $val); } add_action( 'user_register', 'user_cf_set', 10, 1 );
これでユーザー作成ページから新規ユーザーを作成したときに、同時にカスタムフィールドにも値が挿入されます。
ポイントは「user_register」フックを利用すること
user_registerフックは新規ユーザー作成後のタイミングで処理を走らせてくれるため、ここで作成されたユーザーのカスタムフィールドを更新することでユーザー作成と同じタイミングでカスタムフィールドの値も挿入することができます。
フックを利用すればWordpressのコアファイルをいじる必要がないので、頻繁にあるWordpressの更新にも限りなく影響を受けづらいです。
(逆にフックを利用しなければWordpressの更新の度にソースが書き換わる可能性があります)
ここからは実際の使用例を見てみましょう。
使用例①自動でアフィリエイト用のコードを発行する
ユーザー用のカスタムフィールド「user_ref」を用意して、ユーザー登録時に自動でアフィリエイト用のコードを挿入するためのコードを書いてみました。
function user_cf_set($user_id) { function get_rand_str() { $str = 'abcdefghijklmnopqrstuvwxyz'; $str_r = substr(str_shuffle($str), 0, 5); return $str_r; } $refcode = $user_id . get_rand_str() . mt_rand(0, 1000); update_user_meta($user_id, 'user_ref', $refcode); } add_action( 'user_register', 'user_cf_set', 10, 1 );
アフィリエイト用のコードはユーザーごとに重複しないようにする必要があるため、「ユーザーID(ユーザー固有の数字)+ランダムな英数字5桁+ランダムな数字3桁程度」をアフィリエイト用のコードとしてカスタムフィールド「user_ref」に挿入するようにしました。
使用例②ユーザー名称のフルネームを登録する
ユーザー用のカスタムフィールド「user_fullname」を用意して、ユーザー登録時に自動で姓名をあわせた内容を挿入するためのコードを書いてみました。
function user_cf_set($user_id) { $user = get_userdata($user_id); $fullname = $user->user_lastname . $user->user_firstname; update_user_meta($user_id, 'user_fullname', $fullname); } add_action( 'user_register', 'user_cf_set', 10, 1 );
get_userdataでユーザー情報を取得して、姓名をあわせた内容をカスタムフィールド「user_fullname」に挿入するようにしました。
おわりに
以上、今回の記事ではWordPressでユーザー登録時にカスタムフィールドの値を自動で挿入する方法を紹介させていただきました。
WordPressのフックを利用すれば、このように任意のタイミングで(コアファイルを書き換えずに)処理を加えることができます。
使用できるフックの一覧は「フィルターフック一覧」「アクションフック一覧」にそれぞれ記載されているので、ぜひ活用してみてください。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。