WordPressのテーマとプラグインを開発していて、ログイン周りなどをカスタマイズしている時、ブラウザのセッションが切れて管理画面に入れなくなってしまう事などがまれにある。
私の例だと、WordPressの会員制サイト作成時などによくお世話になる「Theme My Login」プラグインを使っていて、プライベートログイン設定で wp-login.php
を無効化した後、ブラウザを再起動してしまったことで、セッションが切れて見事管理画面に入れなくなってしまった。
こういうのはレアケースのように思えるが、WordPressでプラグインやテーマを作ったりしていると、/wp-login.php や /wp-admin/ にアクセスしても真っ白な画面が表示されるだけになることは何気に多かったりする。
そして、FTP等でサーバにプラグインやテーマをアップロード中にパケットが欠損して、サーバ側のプラグインやテーマが壊れてしまうといったケースでも、管理画面に入れなくなることがある。
まぁ、そんな時でも、WordPressのデータベースの構造を知っている上級者なら、直接DBにログインして、該当レコードを修正してやることで復旧できる。しかし、それでもプラグインのデータについては、シリアライズされた値が格納されているので、更新するのは骨が折れるのだ。
一方で、そこまでWordPressに詳しくない人だと、こんな事態が発生するとおそらく路頭に迷ってしまうのではないだろうか?
──というわけで、そういう緊急事態にもある程度冷静に対処できるためのツールを作ってみた。その名も「wp-emergency.php」だ。
wp-emergency.php の使い方
このツールの利用方法は簡単だ。
まず、ダウンロードして解凍したphpファイルを緊急事態発生中のWordPressサイトの wp-config.php
が置いてあるディレクトリと同じところに設置して、ブラウザから (WordPressサイトのドメイン)/wp-emergency.php
でアクセスするだけである。
すると、下記のような画面が表示される(Englishファーストなポリシーのため、UIは全て英記ッス)。

現在のWordPressサイトで有効化されているプラグインと、活性化しているテーマの一覧である。

次に、無効化したいプラグインやテーマにチェックを入れ、Submitボタンを押す。

無効化完了のメッセージが表示されれば終了だ。
なお、テーマを無効化すると、デフォルトのテーマである「twentyseventeen」にロールバックする仕組みになっている。
これで、WordPressサイトにアクセスしてみると、再びログインできるようになっているはずだ(──なっていない場合、無効化するプラグインを増やしてみよう。もしすべて止めても改善しない場合、障害の原因はプラグインやテーマ以外のところにあるという切り分けができる)。
ロールバックするテーマを変更する
このツールの初期設定ではテーマを無効化すると「twentyseventeen」テーマにロールバックするが、古いWordPressなどで「twentyseventeen」テーマがパッケージングされていない場合には、このロールバックではよくない。
本当は、WordPressの定数 WP_DEFAULT_THEME
を参照したかったんだが、その定数を定義している wp-includes/default-constants.php を require すると上手く動かなかったので、このツールのファイル内で定義している。
──なので、ツールを使う前に、 wp-emergency.php をテキストエディタ等で開いて、19行目の「twentyseventeen」部分(下記参照)をロールバックしたいテーマ名(=テーマのディレクトリ名)に変更することで、好きなテーマにロールバックできるようになる。
if ( ! defined( 'WP_DEFAULT_THEME' ) )
define( 'WP_DEFAULT_THEME', 'twentyseventeen' );
↓
if ( ! defined( 'WP_DEFAULT_THEME' ) )
define( 'WP_DEFAULT_THEME', 'twentysixteen' );
使用後はファイルごと削除する
公開環境などでは、このツールを使用したら、必ず削除すること。でないと、第三者がこのツールを使ってプラグインやテーマを無効にできてしまうのだ。
できれば、このツールを導入する前に、 .htaccess
で wp-emergency.php ファイルへのアクセスIPを縛る等の施策をしておくと安全だ。その場合は、下記の設定を参照してほしい。
<Files ~ "^wp-emergency.php$">
order deny,allow
deny from all
allow from IP 123.4.5.6
</Files>
ご利用は計画的に(^_^;
このツールを利用して発生したトラブル等、作者である私は、一切責任を負いません。ご利用の際は自己責任でお願いします。
ダウンロード
ダウンロードはこちらから:
ソースはGistに公開中:
https://gist.github.com/ka215/1f1ba4d05aca56c4edefd3e6649a16ed
不具合や、機能追加の要望などあれば、連絡ください。