WordPressのオリジナルテーマ開発で下層ページの実装をする際、下記の手順かと思います
「固定ページを管理画面で作成し、そのページスラッグに対応するテンプレート(例:page-about.php)を用意する」
その方法だと、テーマを有効化するだけでは完結せず管理画面上での操作が必要になりますよね。
テーマファイル群のみの納品方法の場合、できればテーマ内で完結させたいですよね!
そこで下記の処理をテーマを適用するだけで自動的に固定ページを作成する方法をご紹介です。
テーマ有効化フックを使って「固定ページをDBに挿入する」処理を仕込むことができます。
実装例:after_switch_themeフック
以下のようなコードをfunctions.php
に書いておくと、テーマを有効化したタイミングで指定の固定ページが自動生成されます。
function mytheme_create_pages_on_activation() {
// 例: about というスラッグの固定ページがなければ生成
if ( ! get_page_by_path( 'about' ) ) {
wp_insert_post( array(
'post_type' => 'page',
'post_title' => 'About',
'post_name' => 'about',
'post_status' => 'publish',
'post_content' => 'ここにAboutページの内容を書くことができます。',
) );
}
}
add_action( 'after_switch_theme', 'mytheme_create_pages_on_activation' );
この方法のメリット
- テーマをインストールして有効化するだけで、管理画面からのページ作成操作が不要
- デフォルトのコンテンツを素早く用意できるので、納品直後からすぐにサイトを動かせる
注意点(推奨はプラグインで管理?)
強調しておきたいのは、コンテンツをテーマ側に含めると、テーマを切り替えたときに不要なページが再生成されたり、逆にコンテンツがなくなったりする可能性があることです。 そのため、推奨は別途プラグインを用意して「固定ページの生成」を実装し、テーマは見た目や機能のみに専念させる方法です。 小規模サイトなど「テーマを切り替えない前提」であれば、テーマにまとめてしまうのも実務ではよく行われます。
まとめ
- テーマ有効化フック(
after_switch_theme
)でwp_insert_post()
を呼び出し、固定ページを自動生成できる - 管理画面操作を省けるので納品時や初期設定で便利
- 将来的なテーマ切り替えを考慮するなら、プラグインでの実装がより望ましい