有効化済み WordPress テーマのスラッグだけ変える方法

当ブログ記事「WordPress 独自テーマのスラッグを決めるたった一つの方法」の関連情報です。

当該記事のように新たに独自テーマを作るのでなく、すでに運用中のテーマスラッグを変えたいときにはどうしたらよいでしょうか…ということで、黒い画面と WP-CLI でサクサクと変更してみましょう。

想定するテーマ構成

  • 有効化済みのテーマ名 … FooBar
  • 有効化済みのテーマスラッグ … foobar
  • 変更後のテーマスラッグ … foobar-wordpress-theme

FooBar, foobar はお使いのテーマに合わせて適宜読み替えてください。

変更手順

テーマファイル群があるディレクトリ( /wp-content/themes )に移動し、まずはデータベースを書き出しておきます。

wp db export

有効化済みのテーマをもとに、変更後の名前でコピーを作ります。

cp -r foobar foobar-wordpress-theme

WP-CLI の wp eval コマンドでデータベース内の設定を変更します。

《有効化済みテーマが子テーマではない場合》

wp eval 'update_option( "template", "foobar-wordpress-theme" ); update_option( "stylesheet", "foobar-wordpress-theme" ); add_option( "theme_mods_foobar-wordpress-theme", get_option( "theme_mods_foobar" ) );'

《有効化済みテーマが子テーマの場合》

wp eval 'update_option( "stylesheet", "foobar-wordpress-theme" ); add_option( "theme_mods_foobar-wordpress-theme", get_option( "theme_mods_foobar" ) );'

wp theme list コマンドでテーマが切り替わっているか確認します。

+------------------------+----------+--------+---------+
| name                   | status   | update | version |
+------------------------+----------+--------+---------+
| foobar-wordpress-theme | active   | none   | 1.0     |
| foobar                 | inactive | none   | 1.0     |
+------------------------+----------+--------+---------+

サイトを表示して不都合があれば、最初に書き出したデータベースを読み込んで再トライしてみてください。

wp db import 書き出したデータベースファイル名

不都合がなければ、スラッグ変更前のテーマディレクトリ foobar と、最初に書き出したデータベースを削除しておきましょう。

wp theme delete foobar
rm 書き出したデータベースファイル名

補足

基本的には以上で作業完了ですが、カスタマイザーの情報が wp_postmeta テーブルに格納されていたりして追加作業が必要なこともあります。

私が遭遇したケースでは Twenty Seventeen の子テーマで設定していたヘッダーイメージの情報が引き継がれていませんでした。

そこで以下のように追加作業を行いました。

旧スラッグを foobar 新スラッグを foobar-wordpress-theme とした場合 wp_postmeta テーブルに

  • _wp_attachment_custom_header_last_used_foobar
  • _wp_attachment_is_custom_header

というキーがあるので

  • キー名を _wp_attachment_custom_header_last_used_foobar-wordpress-theme に変更
  • キー _wp_attachment_is_custom_header の値を foobar-wordpress-theme に変更

という手順をとることでヘッダーイメージが引き継がれました。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください