WordPress:新規ユーザー作成時に任意のコンテンツや設定を反映した新規ページも作成する方法

WordPress:新規ユーザー作成時に任意のコンテンツや設定を反映した新規ページも作成する方法

WordPressでユーザーを新規追加した際、同時にタイトル・コンテンツ・カテゴリーなどが任意の内容で設定された新規ページも作成する方法です。
固定ページやカスタム投稿を使ってユーザー毎のプロフィールページを用意しているサイトなどであれば、これを利用することでわざわざユーザーが追加される度に手作業で専用ページも新しく用意するという手間も省くことができます。

固定ページを作成

ユーザーの新規追加完了と同時に固定ページを作成したい場合は、user_registerwp_insert_post()を用いてfunctions.phpに下記のように記述します。
記述後にユーザーを新規追加して固定ページ一覧を確認すれば、設定した内容で新たにページが作成されているのを確認できます。

functions.php

add_action( 'user_register', 'create_user_page' );
function create_user_page( $user_id ) {
  $user_info = get_userdata( $user_id );
  $user_name = $user_info->first_name . ' ' . $user_info->last_name;

  $postarr = array(
    'post_name' => 'page-user' . $user_id,
    'post_title' => $user_name,
    'post_content' => $user_name . ' profile page.',
    'post_status' => 'publish',
    'post_type' => 'page',
    'page_template' => 'page-user.php',
  );
  wp_insert_post( $postarr );
}

新規追加されたユーザーの情報を新規ページに利用・反映したい場合は、サンプルにもあるように引数の$user_idを用いてget_userdata( $user_id );でユーザーの情報を取得すれば可能です。
ページ作成時の設定についてはwp_insert_post()のパラメータで指定し、上記をそのまま利用した場合はそれぞれ下記のような設定の固定ページが作成されます。

  • スラッグ(パーマリンク): page-user{ユーザーID}
  • ページタイトル: {ユーザー姓} {ユーザー名}
  • コンテンツ(エディタ内): {ユーザー姓} {ユーザー名} profile page.
  • 投稿ステータス: 公開済
  • 投稿タイプ: 固定ページ
  • テンプレート: page-user.phpをテンプレートに設定

wp_insert_post()で指定できる値は「抜粋」「作成日時」「カテゴリー」など他にも用意されており、詳しくは以下で確認できます。

カスタム投稿の新規ページを作成

wp_insert_post()のパラメータにあるpost_typeを使えば投稿タイプを任意で設定できるので、もちろんカスタム投稿の新規ページを作成することも可能です。
例えば投稿タイプが「member」、タクソノミーが「member_cat」というカスタム投稿で使用したい場合、functions.phpへ下記を記述すればユーザーの新規追加完了と同時に「member」のカスタム投稿に新規ページが作成されるようになります。

functions.php

add_action( 'user_register', 'create_user_page' );
function create_user_page( $user_id ) {
  $user_info = get_userdata( $user_id );
  $user_name = $user_info->first_name . ' ' . $user_info->last_name;

  $postarr = array(
    'post_name' => 'page-user' . $user_id,
    'post_title' => $user_name,
    'post_content' => $user_name . ' profile page.',
    'post_status' => 'publish',
    'post_type' => 'member',
    'tax_input' => array( 'member_cat' => 10 ),
  );
  wp_insert_post( $postarr );
}

基本的な記述内容は固定ページ作成時と同様ですが、大きな違いとしてこちらの場合はタクソノミーとタームを設定する形にしています。
タクソノミーとタームを設定する際はtax_inputを使用して'tax_input' => array( {$taxonomy} => {$term_id} )のように記述し、このサンプルの場合は10を指定しているので「member_cat」の中で10のタームIDを持つものが新規作成ページに設定されます。
タームを複数設定したい場合はarray()を使用し、例えば10, 12, 15のIDをもつタームであれば'tax_input' => array( 'member_cat' => array( 10, 12, 15 ) )のように記述することで設定できます。


今回は新規ユーザー作成時と組み合わせたものでしたが、このようにwp_insert_post()を使うことで何かしらのタイミングで任意の設定内容で新規ページ作成や既存ページの更新が可能なので、上手く利用すればこれまで手作業だった工程を自動化することも可能だと思います。

Close the search window,
please press close button or esc key.