プログラミングの役立つ記事をお届けします

【WordPress】空の固定ページをサクッと挿入するスクリプト

どうも、タカフです。

WordPress案件やっていると、「実際の表示内容はページテンプレートの方でやるからとりあえず、スラッグ名・ページタイトル・本文空文字での固定ページをさくっと挿入したいんだけどな」みたいな事ありませんでしょうか?
例えば企業サイトなんか作っている時に、

  • 会社概要
  • お問い合わせ
  • 利用規約

あたりは結構当たり前のように作るページなので、そういう時にサクッと作りたいわけであります。
あとは開発環境で作った固定ページを本番環境にも欲しいっていう時もそういうケースがあると思います。

ということで、そんな時にサクッと空の特定固定ページを挿入するスクリプトを作りました。
ご丁寧にも親子関係にも対応してます笑

insert_page.php
require_once( 'path/to/your/wp-load.php' );
$posts_ary = [
  [
    'post_title'   => 'お問い合わせ', // 固定ページタイトル
    'post_name'    => 'contact', // スラッグ名
    'post_content' => '', // 空contentでいいなら空文字をセット(なくてもいい)
  ],
  [
    'post_title' => '会社概要',
    'post_name'  => 'company',
  ],
  [
    'post_title'  => 'アクセス',
    'post_name'   => 'access',
    'post_parent' => 'company',  // 親投稿指定したい場合は親投稿のスラッグ名
  ],
 
  /// 他にもあればここに配列を追加していく...
];

foreach ($posts_ary as $p) {
  // 固定ページの検索はスラッグのところがnameというキーになるので検索用パラメータとして整える
  // 参考URL<https://codex.wordpress.org/Template_Tags/get_posts#Get_a_post_by_its_slug>
  $searchParam = [
    'post_type'     => 'page',
    "name"          => $p["post_name"],
    "post_status"   => 'publish',
    "post_per_page" => 1,
  ];

  // 検索して既に存在するならスキップ
  $existPost = get_posts($searchParam);
  if (is_array($existPost) && count($existPost) > 0) {
    echo "「{$p['post_title']}」は既に存在する投稿です。" . PHP_EOL;
    continue;
  }

  $insertPost = [
    'post_type'    => 'page',
    'post_title'   => $p["post_title"],
    'post_name'    => $p["post_name"],
    'post_status'  => 'publish',
    'post_author'  => 1,
    'post_content' => (isset($p["post_content"])) ? $p["post_content"] : "",
  ];

  // 親投稿の指定の有無チェック
  if (!array_key_exists("post_parent", $p)) {
    // 親投稿の指定がない場合はそのままデータベースに追加
    $_postId = wp_insert_post($insertPost);
    if ($_postId) {
      echo "「{$p['post_title']}」の投稿を挿入しました。(投稿ID:{$_postId})" . PHP_EOL;
    } else {
      echo "「{$p['post_title']}」の投稿に失敗しました。" . PHP_EOL;
    }
  } else {
    // 親投稿の指定がある場合は、親投稿のIDを検索する
    $searchParam["name"] = $p["post_parent"];

    // 検索して既に存在するならスキップ
    $parentPost = get_posts($searchParam);
    if (is_array($existPost) && count($existPost) > 0) {
      echo "親指定の{$p["post_parent"]}の投稿が見つかりません" . PHP_EOL;
      continue;
    }
    $parentId                  = $parentPost[0]->ID;
    $insertPost["post_parent"] = $parentId;  // 親投稿スラッグを投稿IDに変更
    // 親投稿の指定がない場合はそのままデータベースに追加
    $_postId                   = wp_insert_post($insertPost);
    if ($_postId) {
      echo "「{$p['post_title']}」の投稿を挿入しました。(投稿ID:{$_postId})" . PHP_EOL;
    } else {
      echo "「{$p['post_title']}」の投稿に失敗しました。" . PHP_EOL;
    }
  }
}

このスクリプトをphpから叩けば空の特定固定ページを挿入してくれます。ページが増えたなら配列を増やしてまた叩けば存在しないページだけ挿入してくれます。

よかったら活用してみてください!

現場からは以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です