WordPress 4.3から、ウィジェットの仕様が変更されて、PHP4.x系のコンストラクタ指定が非推奨になった。デバッグモードをONにして、WordPress 4.3のサイトにアクセスすると、まれに下記のようなPHPのNoticeエラーが出力される場合がある。

Notice: 呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています! 代わりに
__construct()
を使ってください。 in \var\www\html\wp-includes\functions.php on line 3457

これは、テーマやプラグインで利用されているウィジェットにPHP4.x系のコンストラクタ指定が入っていると表示される。
WordPressのウィジェットは一般的にWP_Widgetクラスを継承して作成するのだが、その際、子クラスから親クラスのコンストラクタを呼び出してオリジナルウィジェットの登録を行う。例えば下記のような感じだ。

class My_Widget extends WP_Widget {

  function __construct() {
    $widget_options = array('classname' => 'my_widget', 'description' => __( 'This is sample widget.', 'text_domain' ));
    $this->WP_Widget( 'my_widget', __( 'My Widget Title', 'text_domain' ), $widget_options );
  }

  (以下略)
}

──ちなみに、このコンストラクタの書き方だと、WordPress4.3ではNoticeエラーになる。PHP4.x系ではコンストラクタの指定をクラス名で代替できるので、子クラスから親クラスのコンストラクタを指定する時に$this->WP_Widget()と書く。この記述はPHP5.x系でも非推奨ながら利用できるものの、今回WordPress4.3では非推奨になったという事だ。今後のPHPのバージョンアップで廃止されるとウィジェットが機能しなくなるための予防措置だろう。

修正方法は該当するコンストラクタ指定部を下記のように修正すればよい。

class My_Widget extends WP_Widget {

  function __construct() {
    $widget_options = array('classname' => 'my_widget', 'description' => __( 'This is sample widget.', 'text_domain' ));
    parent::__construct( 'my_widget', __( 'My Widget Title', 'text_domain' ), $widget_options );
  }

  (以下略)
}

$this->WP_Widget()parent::__construct()と修正するだけだ。これでNoticeエラーは出なくなる。

今回は、ちょいネタでした。