マルチサイトでサイトを作成したときに処理を実行したかったので、それのスニペットになります。
サイト初期化用フックで関数を実行する
サイト作成時に用意されている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"
}
}
以上です。参考になれば。