The called constructor method for WP_Widget is deprecated since version 4.3.0! Use __construct() instead. 오류

최근 워드프레스 4.3.0으로 업데이트하면서 일부 테마나 플러그인에서 다음과 같은 오류가 발생할 수 있습니다.

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method wf_ftw::widgets_init() should not be called statically in /home2/dbname/public_html/wordpress/wp-includes/plugin.php on line 503

Notice: The called constructor method for WP_Widget is deprecated since version 4.3.0! Use __construct() instead.

이 문제는 WP_Widget의 contructor 메소드가 4.3.0부터 사용되지 않기 때문에 __construct()를 대신 사용하라는 경고 메시지입니다.

워드프레스에서 이 업데이트에 대해 제작자들에게 공지했기 때문에 대부분 이 부분가 해결되었겠지만 간혹 그렇지 못한 테마나 플러그인에서 저런 메시지가 표시되는 것 같습니다.

이 경우 별 문제가 없다면 간단히 Debug 메시지를 표시하지 않도록 wp-config.php 파일(워드프레스가 설치된 Root 폴더에 위치)에서

define('WP_DEBUG', true);

부분을 다음과 같이 변경합니다(true->false):

define('WP_DEBUG', false);

그러면 에러 메시지가 표시되지 않습니다.

또는 다음과 같은 코드를 함수 파일에 추가하면 더 간단히 이 오류 메시지가 표시되지 않습니다.

add_filter('deprecated_constructor_trigger_error', '__return_false');

이 문제를 직접 해결하고 싶은 경우 아래의 변경 예를 참고해 보시기 바랍니다. WP _Widget() 함수 부분을 __construct()로 대체하여 테스트해 보시기 바랍니다.

class Flickr_Widget extends WP_Widget {

function Flickr_Widget()
{
//

$this->WP_Widget('flickr-widget', 'Pro: Flickr Widget', $widget_ops, $control_ops);
}

이 코드를 다음과 같이 수정합니다:

    class Flickr_Widget extends WP_Widget {

function __construct()    {
//

parent::__construct('flickr-widget', 'Pro: Flickr Widget', $widget_ops, $control_ops);
}

또 다른 예를 하나 볼까요?

class GoogleAdsensePlugAndPlayWidget extends WP_Widget
{
function GoogleAdsensePlugAndPlayWidget()
{
$widget_ops = array('classname' => 'GoogleAdsensePlugAndPlayWidget', 'description' => 'Adsense Plug & Play - Sidebar add' );
$this->WP_Widget('GoogleAdsensePlugAndPlayWidget', 'Adsense Plug & Play - Sidebar add', $widget_ops);
}
// ...........
}

아래와 같이 수정하도록 합니다.

class GoogleAdsensePlugAndPlayWidget extends WP_Widget
{
function __construct()
{
$widget_ops = array('classname' => 'GoogleAdsensePlugAndPlayWidget', 'description' => 'Adsense Plug & Play - Sidebar add' );
parent::__construct('GoogleAdsensePlugAndPlayWidget', 'Adsense Plug & Play - Sidebar add', $widget_ops);
}
// ...........
}

요약하면 "Use __construct() instead." 에러 메시지가 표시되면 먼저 기능면에서 문제가 없는지를 확인해봅니다. 사용에 아무런 문제가 없으면 간단히 wp-config.php에서 debug 표시 부분을 false로 수정하거나 add_filter를 사용하여 이 메시지만 표시되지 않도록 할 수 있습니다. 만약 기능상에 문제가 있다면 테마 혹은 플러그인 제작자에게 연락하여 문제를 해결하도록 합니다.

일부 글에 제휴 링크가 포함될 수 있으며 파트너스 활동으로 일정액의 수수료를 받을 수 있습니다.

댓글 남기기

* 이메일 정보는 공개되지 않습니다.