COCOONバージョン: 2.4.2.4 に自動更新されてからWordPressにログインできなくなりました。
ログインすると上記が表示されてワードプレスの管理画面にアクセスできません。
サイトで技術的な問題が発生しています
メールで「サイトで技術的な問題が発生しています」という案内が届きました。
「WordPress 5.2から、サイトでプラグインやテーマが致命的なエラーを発生させた場合にそれを検知してこの自動メールでお知らせする機能が追加されました。」
そして、
「今回の場合、WordPress がテーマ Cocoon でエラーを捉えました。」
最近のワードプレスは新設ですね。(^^)
リカバリーモードでログインする
WordPress には特別な「リカバリーモード」があります。
メールにアドレスが記載されているので、それをクリックしてリカバリーモードでワードプレスにログインします。
ここで注意です。
ログアウトする際は必ず右上に赤字で表示されている「リカバリーモードを終了する」をクリックしてログアウトしましょう。
最悪、ログインできなくなります。
ダッシュボートをみるとやはり、COCOON の自動アップデート後に管理画面にアクセスできなくなったのですが、テーマが関連しているようです。
テーマ画面に移動してみましょう。
壊れているテーマとして COCOON の名前があがっています。
自動更新はされているけれど、足りない部分があると。
そこでFTP転送で直接サーバーのワードプレステーマフォルダにCOCOON2-4-2-4を転送してみましたが状況は変わらずでした。
COCOONの子テーマがcocoon-child-master-1.1.2 を使用していたのでcocoon-child-master-1.1.3にFTP転送でサーバに直接更新してみましたが、これでも状況は変わらずでした。
エラーの詳細
エラーを知らせるメールには、
エラー詳細
===============
エラータイプ E_ERROR が /home/●●●/www/●●●/wp-content/themes/cocoon-master/lib/theme-update-checker.php ファイルの 182 行目で発生しました。 エラーメッセージ: Uncaught Error: Attempt to modify property “response” on bool in /home/●●●/www/●●●/wp-content/themes/cocoon-master/lib/theme-update-checker.php:182
Stack trace:
#0 /home/●●●/www/●●●/wp-includes/class-wp-hook.php(309): ThemeUpdateChecker->injectUpdate()
#1 /home/●●●/www/●●●/wp-includes/plugin.php(189): WP_Hook->apply_filters()
#2 /home/●●●/www/●●●/wp-includes/option.php(1957): apply_filters()
#3 /home/●●●/www/●●●/wp-includes/update.php(790): get_site_transient()
#4 /home/●●●/www/●●●/wp-admin/menu.php(33): wp_get_update_data()
#5 /home/●●●/www/●●●/wp-admin/admin.php(158): require(‘…’)
#6 /home/●●●/www/●●●/wp-admin/index.php(10): require_once(‘…’)
#7 {main}
thrown
このようなエラーに関する詳細が記載されていました。
ファイルマネージャーでphpを直接編集
私はさくらインターネットのレンタルサーバーを利用しているので、コントロールパネルからファイルマネージャーで wp-content/themes/cocoon-master/lib/theme-update-checker.php と辿っていき、theme-update-checker.php のエラーに関する個所を直接編集してエラーを解消しました。
恐らくログイン時にアップデートがあるか読みに行っており、そこで止まっている感じがするので、
theme-update-checker.php の記述にある、
public function injectUpdate($updates){
$state = get_option($this->optionName);
//Is there an update to insert?
if ( !empty($state) && isset($state->update) && !empty($state->update) ){
$updates->response[$this->theme] = $state->update->toWpFormat();
}
この部分を下記に編集しました。
public function injectUpdate($updates){
$state = get_option($this->optionName);
//Is there an update to insert?
//if ( !empty($state) && isset($state->update) && !empty($state->update) ){
// $updates->response[$this->theme] = $state->update->toWpFormat();
//}
3か所に「//」を書き加えただけですが、これでエラーは発生しなくなりました。
エラーが発生した環境
さくらインターネット さくらのレンタルサーバ スタンダード
WordPress バーション5.9.2
現在のテーマ: Cocoon Child (バージョン 1.1.3)
PHP バージョン8.0.12
theme-update-checker.php の記述を書き換えたので、以後、自動アップデートは行えなくなります。
WordPressのバーションがあがるか、PHPのバージョンがあがるか、COCOONのバージョンがあがるか。
どれかのタイミングで動作するようになると思いますが、もし、さくらインターネットのレンタルサーバの仕様か何かが絡んでくると、改善は先の話となるのでしょう。
今後は?
テーマの更新チェックを自分で行って、更新されていれば手動でFTP転送。
ログインできないエラーが発生すれば、先のPHPを書き換える。
その繰り返しでしょうが頻繁に更新されるものでもないので苦にはなりません。
最後に再確認!
リカバリーモードでログインしたら必ず「リカバリーモードを終了」してワードプレスを終了させましょう。
イニシャライズされていないと表示されて、メールに記載するリカバリーモード用アドレスでもログインできなくなります。
そんな時は、エラーをわざと発生させてワードプレスに「サイトで技術的な問題が発生しています」のメールを再度送信させ、そこに記載するリカバリーモード用のアドレスから管理画面に入るのですが、面倒ですし、別の問題を抱えても嫌なので「リカバリーモードを終了」を忘れずに。
もしかしたら一定時間が経過し、またアップデートを見に行った際に「サイトで技術的な問題が発生しています」メールが届くのかもしれませんが、それを待つのも時間がもったいないので、「リカバリーモードを終了」を忘れずに。(^^)
【価格チェックと購入】
Amazon パソコン・周辺機器ベストセラーの価格チェック
Amazon 無線ルーターの価格チェック