WordPress 更新後にプラグイン一覧が開かない原因と対処法

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

WordPress を更新した直後に、プラグイン一覧が突然開かなくなり「重大なエラー」が表示されることがあります。この現象はサイトの設定や操作ミスが原因ではなく、WordPress 本体と PHP の仕様が噛み合わないことで発生します。

この記事では、難しいプログラムの知識がなくても実行できる、安全で確実な解決方法をまとめています。

プラグイン一覧が開かない症状

更新後、プラグイン画面を開こうとすると管理画面が停止し、次のような「重大なエラー」の表示に切り替わることがあります。

プラグイン一覧だけが真っ白になる、他の画面は開けるのにプラグイン一覧だけ落ちる、といった状況もこのケースに当てはまります。

エラーメッセージと原因

エラーログを見ると、次のようなメッセージが残っています。

[08-Dec-2025 11:59:12 UTC] PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + int in 【省略】\wp-admin\includes\class-wp-plugins-list-table.php:189
Stack trace:
#0 【省略】\wp-admin\plugins.php(553): WP_Plugins_List_Table->prepare_items()
#1 {main}
  thrown in 【省略】\wp-admin\includes\class-wp-plugins-list-table.php on line 189

この内容は「文字列 (string) と数字 (int) を足し算したためにエラーになった」という意味です。PHP 8.1 ではこの操作が禁止されており、WordPress の内部処理がこの仕様に完全に対応していないため、エラーが発生します。

エラーが発生する仕組み

WordPress には「最近有効化したプラグインの一覧」を記録する仕組みがあり、そのデータが壊れていたり、数字以外の値が混じっているとプラグイン一覧の読込時に必ずエラーが起きます。

問題が発生する箇所は次のコード部分です。

if ( $screen->in_admin( 'network' ) ) {
	$recently_activated = get_site_option( 'recently_activated', array() );
} else {
	$recently_activated = get_option( 'recently_activated', array() );
}

foreach ( $recently_activated as $key => $time ) {
	if ( $time + WEEK_IN_SECONDS < time() ) {
		unset( $recently_activated[ $key ] );
	}
}
?>

本来ここには「数字」が入っている前提で処理されていますが、WordPress の更新タイミングや環境によって「文字列」が混じることがあり、その状態で PHP 8.1 が実行されると TypeError が発生します。

解決方法(recently_activated のリセット)

もっとも簡単で確実な解決方法は「recently_activated」という項目をリセットすることです。この項目に不正な値が入っていると、プラグイン一覧が毎回エラーになります。

  • phpMyAdmin を開く
  • wp_options テーブルを選択する
  • 「recently_activated」を検索
  • 該当の行を削除する

この項目が削除されると、WordPress が自動的に再生成するため、エラーが解消されてプラグイン一覧が正常に表示されます。

管理画面に入れない場合の対処

管理画面そのものが開けない場合は、FTP を使って WordPress 読込時に不正な値を無視するよう設定すれば復旧できます。

  • wp-content 内に「mu-plugins」フォルダを作成
  • その中に「fix-recent.php」というファイルを作成
<?php
add_filter('option_recently_activated', function ($value) {
    if (!is_array($value)) {
        return array();
    }

    foreach ($value as $key => $time) {
        if (!is_numeric($time)) {
            unset($value[$key]);
        }
    }

    return $value;
});
?>

管理画面が復旧したら、このファイルは削除して問題ありません。

応急処置(PHP を戻す)

どうしてもすぐに復旧したい場合、サーバーの PHP バージョンを 8.0 に戻すことで、一時的にエラーを回避できます。WordPress 本体の仕様上、PHP 8.1 より 8.0 のほうが安定して動作します。

ただし、これはあくまで応急処置であり、できれば earlier の方法で根本的に修正することをおすすめします。

再発防止策

今回の不具合は操作ミスではなく、WordPress の内部データと PHP の仕様差によって起きるものです。完全に防ぐことは難しいですが、次の点を意識すると再発しにくくなります。

  • 不要なプラグインは削除する
  • プラグインの更新は小まめに行う
  • バックアップを定期的に取っておく

まとめ

このトラブルは、WordPress の内部処理が PHP 8.1 の仕様と合わないことで発生しています。サイト運営者側の設定や操作が原因ではありません。ここで紹介した手順で「recently_activated」をリセットすれば、プラグイン一覧は問題なく表示されるようになります。