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

Last Updated: 2023년 07월 17일 댓글

최근 워드프레스 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를 사용하여 이 메시지만 표시되지 않도록 할 수 있습니다. 만약 기능상에 문제가 있다면 테마 혹은 플러그인 제작자에게 연락하여 문제를 해결하도록 합니다.

워드크래커의 아바타 이미지

워드크래커

전문 영한번역가. 워드프레스 애호가. 네이버 카페 「워프사」 운영.

댓글 남기기

댓글 남기기

카카오톡 상담 카톡 서비스 상담