WordPressでテーマをインストールしたり、パソコンにある更新済みの圧縮フォルダをアップロードして上書きインストールした時にエラーが出たことありませんか?また、上書きしたのに新しく同じ名前のテーマがインストールされてしまったことありませんか?
今回初めてそんな現象に遭遇しましたので、この現象が起こる原因と確認事項、どうやって解消(対処)するのかを紹介します。なお、私の場合ではという注釈付きの記事(備忘録)ですので、自身のサイトの状況と照らし合わせながら参考としてご覧ください。
結論 テーマ名フォルダごと圧縮していないのが原因
WordPressでは、テーマをアップロード更新する(アップロードインストールも含む)場合、一時的にアップロードフォルダ(つまりメディアとして認識するフォルダ)へ格納し、展開したものがテーマの中へ移動する?という仕組みになっているようで、ちょっとややこしいですけど、圧縮ファイルを展開した後のテーマフォルダ名と、もともとテーマフォルダ内にあるテーマフォルダ名を比較して、重複していれば上書きインストール、重複していなければ、新規インストールとなるようです。
従って、zip形式にしたテーマファイルの中身が以下のようになっていないと上書きされないという現象が起こるのです。
〇〇.zip
-テーマフォルダ名
-テーマ内のファイルやフォルダ
今回の不具合が起きたテーマ(まあ自作テーマですが...)は、zip圧縮した直下にテーマ内のファイルやフォルダがある状態だったため、以下のようにして新テーマが生成されてしまったようです。
- テーマをアップロードする
- WordPressがメディアに一旦格納する(この時にメディアにもともとあった〇〇.zipと重複したため、「-1」が付与される)
- 2で展開したフォルダ名は「〇〇-1」(つまりメディア内での重複を自動的に避けた形)なので、テーマフォルダ内にある「〇〇」というフォルダとは異なると判断して、「〇〇-1」というテーマが新規インストールされたと
分かってみると、単純にも思える話ではありますが、今まで私の中では、どこかで入手したテーマの圧縮を展開するとすぐにテーマ内のフォルダやファイルがあったと記憶していたので、そのようにしてしまったことで上書きされなかったようです。
試しにWordPressのデフォルトテーマである「Twenty Twenty One」を公式サイト(wordpress.org)からダウンロードしてみたところ、前述したように
twentytwentyone.1.4.zip
-「twentytwentyone」フォルダ
-テーマ内のファイルやフォルダ
になっていました。
テーマを自作する機会がない方には全く気にする必要のないことですが、同じ現象が起きて「何で?」となった方の参考になれば幸いです。
参考:https://github.com/WordPress/WordPress/blob/5.8.2/wp-admin/includes/class-wp-upgrader.php#L503-L514
ここから先は以前に対処したときの備忘録です。結論としては先の通りですので読まなくて大丈夫です(笑)。
【事象発生】テーマを上書きインストールしたはずが・・・
新しく自作テーマを作るべく、style.css、functions.phpを作り、圧縮フォルダにして、テストサイトのテーマ追加からアップロードしたところ、
index.phpがありません
というエラーが!!はいはい、私が入れ忘れたんですよ!!とブツブツ言いながら、再度index.phpを含めた圧縮フォルダを作って、アップロードインストールしました。
無事完了!と思いきや、テーマの一覧を開いてみると、なんと同じ名前のテーマが2つできているではありませんか・・。
何で?で、一旦両方のテーマを削除し、再度アップロードインストール。今度はうまくいきました。
その後、パソコン上でテーマファイルに変更をかけ、圧縮をした後に、サイトの管理画面からアップロード更新したら・・・更新ではなく、また同じように同じ名前のテーマが2つ。何で??となってしまいました。
テーマが2つあるってことは、テーマフォルダも2つあるのでは?でFTPでサイト内を覗いてみたら・・ありました、「habone」(今回作ろうとしているテーマ)と「habone-1」というテーマのフォルダが。
詳しく調べてはいないものの、長年WordPressと付き合ってきた肌感覚として、この現象が起こる原因は、例えば投稿作成の時にパーマリンクが重複すると、自動で「-1」「-2」が付くのと同じで、テーマも1回目のインストールでエラーになったものがひとまず「-1」なしと登録され、次にインストールしたのは同じ名前だけど一応重複を避けるため「-1」が付いたのでは?と推察(結局これが正解)。
そこで、これでは今後の更新で影響があるのは必至だし、不具合が起こることだってあるし、なんとかせねば!ということで対処開始です。
この措置によって、更新前のテーマで設定されていた項目が消失する(未設定の状態に戻る)ことがあるので、承知の上、自己責任で行ってください
【解決方法】テーマ重複の解消方法
まずは一旦テーマはどちらも削除しようということで、管理画面から削除(FTPから強制削除するとまた何か起こりそうなので、WordPressに認識されているものであれば管理画面から行った方が無難です)。
この状態で、再びテーマをインストールしても、結局「-1」が付いてしまうので、サーバーへ接続し、phpMyAdminを開いて該当サイトの〇〇_optionsテーブル(〇〇は接頭辞)を開いて・・・
中身を確認すると、ホラありました。テーマ設定の重複が!
thme_mods_テーマ名
というのがテーマの設定ファイルです(テーマカスタマイザーを作ったことある人なら見おぼえがあるコードかと..)
恐らく正しい手段としては、どちらも削除してから再度テーマをインストールなのでしょうけど、今回は「-1」のついている方だけを削除しました。
そして、テーマを再度インストール....うまくいきました。
さらに、上書きアップデート(更新)...いつもの画面が出てきて成功しました。
FTPで確認しても、きちんと「-1」のないものだけが表示されていますし、phpMyAdmin上でも「-1」のついているものはないですから問題ないでしょう。
どうしてもうまくいかないときは
上記の方法で、テーマフォルダを削除し、optionsテーブル内のtheme_modsデータも削除して、再びアップロードインストールしたら、やはり同じように「-1」というフォルダが作られてしまうときがあります。
こうなるとどうにもならないので、再びフォルダ削除後に以下の作業をするとインストールできます。
- パソコン上のテーマ圧縮フォルダを解凍する
- 解凍したフォルダをサーバーのテーマフォルダへアップロードする
- 管理画面から有効化する
これでもダメだったら、そのテーマの使用はあきらめた方がいいかも知れません。
同じ現象で困った方の参考になれば幸いです。
本記事をざっと読んで、画面に見覚えがなかったり、疑問に思う部分があったりしたら、無理に荒療治をすることは避けましょう。