【WordPress】Deprecated: Methods with the same name… エラーの原因と対処法(PHP7/8対応)custom-post-template ワーニング対策
WordPressで出る「Deprecated constructor」警告を自分で直す方法【初心者向け】
WordPress を使っていたら、いつも通りの画面に突然見慣れない英語の長い警告がズラズラと並んで表示されてビックリした、という経験はありませんか?特にPHPのバージョンアップを行った直後や、古いプラグインを有効化したときに出やすいのが、今回取り上げる 「Deprecated(非推奨)」エラー です。これは「まだ動くけれど将来的にはサポートしない古い書き方を使っている」という意味で、放置してもすぐ壊れるわけではありませんが、今後のバージョンでは致命的エラーになりかねない警告です。
英語のエラーメッセージを見ると不安になりますが、実際には原因はシンプルで、修正方法もとても簡単です。初心者でも数分あれば対応可能ですし、コピペで修正できる具体的なコード例も紹介します。この記事では、なぜこのエラーが出るのか、どう直せばよいのか を順を追ってわかりやすく解説していきます。
どんなエラーが出るの?
実際に出るエラーメッセージはこちらです。Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Widget_SU has a deprecated constructor in ...
日本語にすると…「クラス名と同じ名前の関数はもうコンストラクタじゃないよ。今後のPHPでは動かなくなるよ!」という意味です。
要は「プラグインの書き方が古い」だけの話です。
原因は「古い書き方のコンストラクタ」
PHPには「クラスを初期化するための関数(コンストラクタ)」があります。- 古いプラグイン:クラス名と同じ関数をコンストラクタにしている
- 新しいPHP:
__construct()
という書き方にしないと警告が出る
class Widget_SU {
function Widget_SU() {
// 初期化処理
}
}
新しい書き方(正しい)
class Widget_SU {
function __construct() {
// 初期化処理
}
}
修正方法(初心者向け手順)
1. バックアップをとる
FTPソフトやサーバーのファイルマネージャーでプラグインフォルダをコピーしておきましょう。2. エラーの出ているファイルを開く
エラー文にファイル名が出ています。例:
/wp-content/plugins/custom-post-template/plugin.php
3. クラスを探す
class Widget_SU { ... }
の部分を見つけます。4. コンストラクタを書き換える
以下のように修正してください。class Widget_SU {
// 新しいコンストラクタ
function __construct($name, $max = 1, $id = '', $args = '') {
$this->name = $name;
$this->id = $id;
$this->widget_max = $max;
$this->args = $args;
if ($this->id == '') {
$this->id = strtolower(preg_replace('/[^A-Za-z]/', '-', $this->name));
}
$this->widget_available = 1;
if ($this->widget_max > 1) {
$this->widget_available = get_option('widget_available_' . $this->id);
if ($this->widget_available === false) {
$this->widget_available = 1;
}
}
add_action('init', array($this, 'initialize'));
}
// 旧コンストラクタを残しておく(後方互換)
function Widget_SU($name, $max = 1, $id = '', $args = '') {
$this->__construct($name, $max, $id, $args);
}
function initialize() {
// 元の処理そのまま
}
後続の関数も単純にそのまま書き写します。
}
5. 保存してアップロード
修正後のファイルをアップロードして、警告が消えるか確認してください。応急処置(どうしても修正が難しい場合)
本番サイトで一時的に警告だけ消したい場合は、wp-config.php
に以下を追記します。define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
ただし、これは 警告を隠すだけで根本解決にはならない ので注意してください。まとめ
-
- 「Deprecated constructor」エラーは 古い書き方のせい
- 修正は「function クラス名」→「function __construct」に変えるだけ
- 初心者でも数分で直せます
- 将来的にPHPのバージョンアップで完全に動かなくなる前に、今のうちに修正しておくのがおすすめです
- もし自分で編集するのが不安な場合は、この記事で紹介した修正版の
plugin.php
をあらかじめ書き換えて用意しておき、WordPress の管理画面から メディアにアップロードしてダウンロードできる形 にしておくと便利です。そうすれば、元のファイルと差し替えるだけで簡単に警告を解消できます。 - 実際に修正済みの
plugin.php
をダウンロードする場合は、以下のリンクから取得してください。
修正版 plugin をダウンロード (※現在バージョンアップされていない状態で使用してください。多分近日中にバージョンアップされるのでそれまではこれでしのいでください。)
👉 これであなたのWordPressから「Deprecated」警告は消えるはずです!