【WordPress】エラーメッセージ(Notice)「代わりに __construct() を使ってください。」の対処方法

  • 投稿 : 2016-11-02
WPxuePhpWidget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています。代わりに __construct() を使ってください。

1.PHP5から、コンストラクタの呼び出し方に変更があった
2.Wordpress4.3からウィジェットのコンストラクタ指定方法が変わった

このあたりです。Notice(注意)なのでエラーではないですが、修正しておいたほうが良いでしょう。

修正前:$this->WP_Widget
修正後:parent::__construct

修正方法は上記のように機械的に置き開ければOKです。

PHP時代は、クラス名と同じ名前の関数がコンストラクタとして機能していて、PHP5からは__construct()という名前の関数がコンストラクタとして機能するようになりました。

PHP 3 や PHP 4 との下位互換性を維持するため、もし PHP がクラスの __construct() 関数を見つけられず、 親クラスからも継承していない場合は、古い形式のコンストラクタ (つまりクラス名と同じ名前の関数) を捜します。 事実上、互換性の問題が発生する可能性があるのは、 そのクラスが __construct() という名前のメソッドを 異なる用途で用いてる場合だけです。
PHP: コンストラクタとデストラクタ - Manual

下位互換を維持するために上記の動作になっているので、従来のコードでも今は動作します。

//修正前
function WPxuePhpWidget() {
    $widget_ops = array('classname' => 'php_widget', 'description' => 'You can have Text, HTML, Javascript, Flash and/or PHP code, wordpress template tags as content or title in this widget.');
    $control_ops = array('width' => 200, 'height' => 120);
    $this->WP_Widget('php_widget', 'PHP widget', $widget_ops, $control_ops);
}
//修正後
function WPxuePhpWidget() {
    $widget_ops = array('classname' => 'php_widget', 'description' => 'You can have Text, HTML, Javascript, Flash and/or PHP code, wordpress template tags as content or title in this widget.');
    $control_ops = array('width' => 200, 'height' => 120);
    parent::__construct('php_widget', 'PHP widget', $widget_ops, $control_ops);
}


参考:
Widgets API « WordPress Codex
PHP: 親クラス - Manual
PHP: スコープ定義演算子 (::) - Manual
PHP: コンストラクタとデストラクタ - Manual
WP_Widget is deprecated since version 4.3.0! Use __construct() - Measured Designs
How to fix the Widget error in WordPress 4.3 - WordPress | Creative Juiz

スポンサーリンク