[WordPress]マルチサイトでサイトが作成されたときに処理を実行する

  • 更新日:
  • 公開日:

マルチサイトでサイトを作成したときに処理を実行したかったので、それのスニペットになります。

サイト初期化用フックで関数を実行する

サイト作成時に用意されているwp_initialize_siteフックを使います。以下はサイト作成時に固定ページを作成する例になります。

/**
 * サイト作成時に固定ページを作成する
 */
function my_wp_initialize_site( $new_site, $args ) {
    // 現在のブログID(メインサイト)を取得
    $current_blog_id = get_current_blog_id();

    // 新規作成したブログに切り替え
    switch_to_blog( $new_site->blog_id );

    // 固定ページの作成
    $post_details = array(
        'post_title'    => $args['title'] . ' Front Page',
        'post_status'   => 'publish',
        'post_author'   => $args['user_id'],
        'post_type' => 'page'
    );
    wp_insert_post( $post_details );

    // 現在のブログに戻す
    switch_to_blog( $current_blog_id );
}
add_action( 'wp_initialize_site', 'my_wp_initialize_site', 10, 2 );

2つ目の引数には作成したサイトの名前やユーザーIDが渡ってくるので、これを利用して固定ページを作成することができます。

もう1つのフックについて

旧バージョンだとwpmu_new_blogが用意されていましたが、バージョン5.1.0より非推奨のフックとなりました。

これの代用でwp_insert_siteフックもあるのですが、wp_initialize_siteの方が渡ってくる引数が1つ多く使い勝手が良いため、今回はこちらを使用しています。

ただし実行順番はwp_insert_siteの方が早くこちらはデータベースが作成された段階なので、場合によって使い分けるのが良さげです。

詳細は「wp_insert_site() | Function | WordPress Developer Resources」を確認することをオススメいたします。

渡ってくる引数の中身

ちなみに以下は、フックした関数に渡ってくる引数の内容をダンプしたモノです。

# 1つ目の引数「$new_site」に渡ってくるオブジェクトの例
object(WP_Site)#13311 (12) {
  ["blog_id"]=>
  string(1) "7"
  ["domain"]=>
  string(19) "example.com"
  ["path"]=>
  string(7) "/test-site/"
  ["site_id"]=>
  string(1) "1"
  ["registered"]=>
  string(19) "2020-02-11 04:58:07"
  ["last_updated"]=>
  string(19) "2020-02-11 04:58:07"
  ["public"]=>
  string(1) "1"
  ["archived"]=>
  string(1) "0"
  ["mature"]=>
  string(1) "0"
  ["spam"]=>
  string(1) "0"
  ["deleted"]=>
  string(1) "0"
  ["lang_id"]=>
  string(1) "0"
}

# 2つ目の引数「$args」に渡ってくる配列の例。タイトルや作成時に設定したユーザーIDなどが含まれます。
array(3) {
  ["title"]=>
  string(5) "Test Site"
  ["user_id"]=>
  int(1)
  ["options"]=>
  array(1) {
    ["WPLANG"]=>
    string(2) "ja"
  }
}

以上です。参考になれば。

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone