固定ページのテンプレートを一括で変更

WordPressで作成しているサイトのデザインを一新しました。

一気にすべてを更新するのではなく、段階的に更新していく方式です。
ってことで、今回は固定ページで作成したページが対象となります。

デフォルトテンプレートから新しいテンプレートに切り替えればそのページの切り替えが完了するって寸法です。

有効な固定ページの一覧を確認

いきなり更新作業を行う前に対象となる固定ページを確認していってみます。

データベースを直接触っていきます。
phpMyAdminとかなんでも良いのでSQLが実行できる準備をしておきます。

公開中の固定ページの一覧を確認します。

SELECT
    *
FROM wp_posts
WHERE post_status = 'publish'
  AND post_type = 'page'
ORDER BY ID
;

page-status で公開中「publish」を、post_type で固定ページ「page」を指定します。

どのページがどのテンプレートか確認

ページごとにどのテンプレートが使われているか確認します。

SELECT
    post_id,
    meta_value
FROM wp_postmeta
WHERE post_id IN (
    SELECT
        ID
    FROM wp_posts
    WHERE post_status = 'publish'
      AND post_type = 'page'
)
AND meta_key = '_wp_page_template'
ORDER BY post_id
;

テンプレートごとの使用数を確認

固定ページで使われているテンプレートの一覧とそれぞれの件数を確認します。

SELECT
    meta_value,
    COUNT(meta_id) AS cnt
FROM wp_postmeta
WHERE post_id IN (
    SELECT
        ID
    FROM wp_posts
    WHERE post_status = 'publish'
      AND post_type = 'page'
)
AND meta_key = '_wp_page_template'
GROUP BY meta_value
ORDER BY cnt DESC
;

ここに出てこないテンプレートは非公開ページに割り当てられていたり、使用されていないことになります。

テンプレートを一気に更新する

「テンプレートの確認」で変更対象のページ数や変更先のテンプレート名の確認ができたかと思います。

ってことで、一気に更新します。

今回はテンプレートが「default」になっているページを「default2.php」に更新します。

※実際に使用するときは「default2.php」の部分を任意のテンプレート名に置換してください。

UPDATE wp_postmeta SET
    meta_value = 'default2.php'
WHERE post_id IN (
    SELECT
        ID
    FROM wp_posts
    WHERE post_status = 'publish'
      AND post_type = 'page'
)
AND meta_key = '_wp_page_template'
AND meta_value = 'default'
;

実はこれだけでは不十分なケースがあってwp_postmeta に _wp_page_template があるとは限らないからです。

ということで、足らずをインサートします。

※実際に使用するときは「default2.php」の部分を任意のテンプレート名に置換してください。

INSERT INTO wp_postmeta (
    meta_id,
    post_id,
    meta_key,
    meta_value
)
SELECT
    NULL,
    ID,
    '_wp_page_template',
    'default2.php'
FROM wp_posts
WHERE post_status = 'publish'
  AND post_type = 'page'
  AND NOT EXISTS
    (
        SELECT
            *
        FROM wp_postmeta
        WHERE wp_postmeta.post_id = wp_posts.ID
          AND meta_key = '_wp_page_template'
    )
;

これで完璧です!

WordPressのお仕事承ります

ということで宣伝です。

弊社では有償でWordpress案件も承っておりますので、お気軽にお問い合わせください。
WordPressは2007年(バージョン2.2)頃から触り続けてきていることもあり得意中の得意です。

特にプログラム開発が必要になるようなカスタマイズは遠慮なくご相談ください。

フロントの見た目に関わるところはデザイン会社が担当、裏方の技術部分を弊社が担当するケースもあり柔軟に対応することができます。

メールやSNSなどのメッセージで簡単に連絡いただいたあとで、電話していただけると確実です。(お問い合わせ