WordPressサイトのPHPバージョンを8.0以上にアップグレードした際、画面上部やログに以下のような警告が表示されることがあります。
Warning: The magic method ...::__wakeup() must have public visibility in ...
これは、プラグインのコードが古いPHPの仕様で書かれているために発生するエラーです。今回は、このエラーの原因と、自分でコードを修正して解決する方法を解説します。
エラーの原因:PHP 8.0での仕様変更
PHPには「マジックメソッド」と呼ばれる、特定のタイミングで自動実行される特殊な関数があります(__construct, __wakeup, __sleep など)。
- PHP 7.xまで:
__wakeup()メソッドの公開範囲(visibility)がprivateやprotectedでも動作していた。 - PHP 8.0以降: マジックメソッドは必ず
publicで定義しなければならないというルールが厳格化された。
そのため、長年更新されていないプラグインを使っていると、この「書き方のルール違反」を指摘されて警告が出るようになります。
解決策:コードを直接修正する
それでは修正していきましょう。
なお、コードの編集ミスはサイトの表示崩れに繋がります。必ずバックアップを取った上で、自己責任で作業をお願いします。
エラーメッセージの中に、修正すべきファイルの場所と行番号が記載されています。
手順①:修正するファイルを確認する
エラー文の後半にあるパスを確認します。 (例:wp-content/plugins/プラグイン名/includes/.../MchBasePublicPlugin.php on line 37)
手順②:該当のファイルを編集する
FTPソフトやサーバーのファイルマネージャーを使い、対象のファイルをテキストエディタで開きます。
手順③:visibilityを「public」に書き換える
エラーが指摘されている行(例:37行目付近)を見つけます。
- 修正前:PHP
private function __wakeup() { ... }またはPHPprotected function __wakeup() { ... } - 修正後:PHP
public function __wakeup() { ... }シンプルにprivateまたはprotectedと書かれている部分をpublicに書き換えて保存します。
これでサイトをリロードし、警告が消えていれば完了です。
注意点と今後の対策
今回はコードの修正で解決しましたが、以下の点に注意が必要です。
※プラグイン更新で上書きされる: もしプラグインがアップデートされた場合、修正した内容は消えてしまいます(今回のケースのように更新が止まっているプラグインであれば問題ありません)。
※根本的な解決(乗り換え): PHP 8以降でエラーが出るプラグインは、メンテナンスが終了している可能性が高いです。セキュリティのリスクを考え、長期的には最新のPHPに対応している代替プラグインへの移行を検討しましょう。
まとめ
「Invisible reCaptcha」などの有名なプラグインでも、開発が止まっていると今回のようなPHPの仕様変更に伴うエラーが発生します。
「publicに書き換えるだけ」という簡単な修正で直ることが多いので、同様のエラーでお困りの方はぜひ試してみてください。
【ご注意】 本記事で紹介する作業は、ファイルの直接編集を伴います。予期せぬ不具合を防ぐため、作業前に必ずバックアップ(ファイルのコピーやデータベースの保存)を取った上で、自己責任にて行ってください。
WordPressの概要を知りたいなら、Webサイト制作の基礎知識体系的に学べるこちらの本がおすすめです!


コメント