WordPressで自動で固定ページを作成する方法
WordPressのオリジナルテーマを作成する際、管理画面からではなく、自動で固定ページを作成する方法をご紹介します。
functions.phpへ直接記述してください。
固定ページ自動挿入関数
まずは最初に全体の完成コードが下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | function create_pages_and_setting() {
//$pages_array[] = array('title'=>'ページタイトル', 'name'=>'スラッグ', 'parent'=>'親スラッグ');
//例としてお問い合わせページを入力(親ページなし)
$pages_array[] = array('title'=>'お問い合わせ', 'name'=>'contact', 'parent'=>'')
; foreach ($pages_array as $value) {
setting_pages($value);
}
}
function setting_pages( $val ) {
//親ページ判別
if(!empty($val['parent'])){
$parent_id = get_page_by_path($val['parent']);
$parent_id = $parent_id->ID;
$page_slug = $val['parent'] . "/" . $val['name'];
}else{
$parent_id = "";
$page_slug =$val['name'];
}
if ( empty(get_page_by_path( $page_slug ))) {
//固定ページがなければ作成
$insert_id = wp_insert_post(
array(
'post_title' => $val['title'],
'post_name' => $val['name'],
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $parent_id,
'post_content' => '',
)
);
}else{
//固定ページがすでにあれば更新
$page_obj = get_page_by_path( $page_slug );
$page_id = $page_obj->ID;
$base_post = array(
'ID' => $page_id,
'post_title' => $val['title'],
'post_name' => $val['name'],
);
wp_update_post( $base_post );
}
}
add_action('after_setup_theme', 'create_pages_and_setting'); |
最初の関数 create_pages_and_setting内にて、ページタイトルとスラッグ、親ページの有無(親があれば親のスラッグ)を、追加したい固定ページに合わせて記述します。これだけで固定ページが追加されます。
解説
まずはテーマが読み込まれた直後のアクションフックを設定します。
1 |
add_action('after_setup_theme', 'create_pages_and_setting'); |
続いて、アクションフックで実行される関数(create_pages_and_setting)内で、配列($pages_array)にページタイトルとスラッグ、親ページの有無(親があれば親のスラッグ)を、追加したい固定ページに合わせて記述します。
複数ページあるようでしたらその分、配列に追加して下さい。
その後、foreachにて上記の配列の中身を、固定ページを追加する関数(setting_pages)に渡します。
1 2 3 | foreach ($pages_array as $value) {
setting_pages($value);
} |
固定ページを追加する関数(setting_pages)内で、まずは渡された固定ページのデータ($val)に親ページが有るか判別します。
親ページが存在するようであれば、親のページIDを取得し、加えてスラッグに親のパスを含めるようにします。
その為、親ページと子ページを同時に追加する場合は、親を先に配列に入れておく必要があります。
1 2 3 4 5 6 7 8 | if(!empty($val['parent'])){
$parent_id = get_page_by_path($val['parent']);
$parent_id = $parent_id->ID;
$page_slug = $val['parent'] . "/" . $val['name'];
}else{
$parent_id = "";
$page_slug =$val['name'];
} |
最後に用意した固定ページのデータを、実際に登録します。
その固定ページがまだ存在していなければ(スラッグで判別)、wp_insert_postにて新規登録。
すでにその固定ページが存在していたら、wp_update_postにて更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | if ( empty(get_page_by_path( $page_slug ))) {
//固定ページがなければ作成
$insert_id = wp_insert_post(
array(
'post_title' => $val['title'],
'post_name' => $val['name'],
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $parent_id,
'post_content' => '',
)
);
}else{
//固定ページがすでにあれば更新
$page_obj = get_page_by_path( $page_slug );
$page_id = $page_obj->ID;
$base_post = array(
'ID' => $page_id,
'post_title' => $val['title'],
'post_name' => $val['name'],
);
wp_update_post( $base_post );
} |
以上です。
管理画面の固定ページ一覧にてページが追加されているか確認してみて下さい。