PHP类扩展类的扩展

时间:2018-02-20 13:24:27

标签: php wordpress oop widget

我尝试扩展Widget_Social_Links类:

class Widget_Social_Links extends WP_Widget {

}

class VD_Widget_Social_Links extends Widget_Social_Links {

}

和init widgets_init hook

function register_vd_social_links_widget() {
register_widget( 'VD_Widget_Social_Links' );
}
add_action( 'widgets_init', 'register_vd_social_links_widget' );

但新的小部件没有出现在管理区域,原因可能是什么?

1 个答案:

答案 0 :(得分:0)

我认为答案是, WordPress小部件必须是WP_Widget直接子级。

尽管如此,这是一个有效的解决方案,但要求您向register_widget()类添加Widget_Social_Links函数。

<?php
class Widget_Social_Links extends WP_Widget {
    public function __construct() {
        $widget_ops = array(
            'classname'                   => 'widget_social_links',
            'description'                 => 'Social buttons for your site?',
            'customize_selective_refresh' => true,
        );
        parent::__construct( 'social_links', 'Social Links', $widget_ops );
    }

    // ...

    public function register_widget() {
        call_user_func_array( array( parent, '__construct' ), func_get_args() );
    }
}

class VD_Widget_Social_Links extends Widget_Social_Links {
    public function __construct() {
        $widget_ops = array(
            'classname'                   => 'vd_widget_social_links',
            'description'                 => 'Social buttons for your site?',
            'customize_selective_refresh' => true,
        );
        parent::register_widget( 'vd_social_links', 'VD Social Links', $widget_ops );
    }

    // ...
}

add_action( 'widgets_init', function () {
    register_widget( 'Widget_Social_Links' );
    register_widget( 'VD_Widget_Social_Links' );
} );