The called constructor method for WP_Widget is deprecated since version 4.3.0

前端 未结 6 603
一生所求
一生所求 2020-12-13 13:28

I just updated to WordPress 4.3 and it seems that something is broken.

I get this error that shows up on my page:

Notice: The called construct

相关标签:
6条回答
  • 2020-12-13 13:58

    Since php 7 isn't supported anymore, the old php 4 object construct was replaced with __construct(). Wordpress developers created a notice message so the plugin developers would change the way their plugins work (and also so it could run on next php versions). Since php 4 has long been dead, there's no reason to use this style of object construct.

    How to fix?

    Option 1 - not going to upgrade to newer php versions

    just add add_filter('deprecated_constructor_trigger_error', '__return_false');

    to your functions.php file it will ignore those notices.

    Option 2 - might upgrade to php 7 / prefer dealing with the issue rather than silencing it

    If this is a third party plugin, beware that if you make the change yourself and the plugin developer releases an update then it will override your changes. Contacting the plugin developer to fix this issue will be the best option

    Find the problematic plugin and change:

    parent::WP_Widget

    To

    parent::__construct

    0 讨论(0)
  • 2020-12-13 14:14

    I guess you are using some plugin that is not updated after wordpress updates and having some code like class ***_Widget extends WP_Widget { .you should update that plugin or deactivate it until It is updated.

    0 讨论(0)
  • 2020-12-13 14:16

    Its kind of warning you can hide the error using add a line in your wp-config.php file in your site root directory

    define('WP_DEBUG', false);

    0 讨论(0)
  • 2020-12-13 14:19

    I am also getting the same error And I fixed it in such a way

    class Dokan_Category_Widget extends WP_Widget {
    
        /**
         * Constructor
         *
         * @return void
         **/
        public function __construct() {
            $widget_ops = array( 'classname' => 'dokan-category-menu', 'description' => __( 'Dokan product category menu', 'dokan' ) );
            $this->WP_Widget( 'dokan-category-menu', 'Dokan: Product Category', $widget_ops );
        }
    }
    

    As way of calling constructor in such way is deprecated in php 7, so I replaced calling way as $this->WP_Widget() with parent::__construct()

    class Dokan_Category_Widget extends WP_Widget {
    
        /**
         * Constructor
         *
         * @return void
         **/
        public function __construct() {
            $widget_ops = array( 'classname' => 'dokan-category-menu', 'description' => __( 'Dokan product category menu', 'dokan' ) );
            //$this->WP_Widget( 'dokan-category-menu', 'Dokan: Product Category', $widget_ops );
            parent::__construct('dokan-category-menu', 'Dokan: Product Category', $widget_ops  );
        }
    }
    
    0 讨论(0)
  • 2020-12-13 14:21

    I experienced this issue and I found by changing the 'true' statement to 'false' in /wp-includes/functions.php it disabled the errors.

    if ( WP_DEBUG && apply_filters( 'deprecated_constructor_trigger_error', true ) ) {

    0 讨论(0)
  • 2020-12-13 14:22

    Declaring a function then calling the parent constructor resolved this issue for me.

    class myClass extends WP_Widget {
      function __construct(){
         parent::__construct(...) // calls constructor from WP_Widget class
      }
    }
    
    0 讨论(0)
提交回复
热议问题