扩展WP_WIDGET_TEXT类

时间:2015-01-03 作者:Sven

我正在尝试更改默认WordPress文本小部件的输出。由于这个小部件是用OOP编写的,我希望它可以简单地扩展类并覆盖一个方法,但事实证明并不是那么容易。

困难的是,我不想创建一个新的小部件,它本质上只是一个具有新名称的文本小部件的副本–我真的想更改当前文本小部件的输出。

我为此编写了一个小插件,包含两个文件:主插件文件和实际类。在主插件文件中,我只需执行以下操作:

add_action(\'widgets_init\', \'include_my_class\');
function include_my_class() {
    include("custom_class.php");
}
如果我不这样做,我会得到一个致命错误,即我试图扩展的类不存在。不过,我当然不确定这样做是否正确。

我的自定义类如下所示:

class CustomTextWidget extends WP_Widget
{

    public function __construct() {
        parent::__construct();
    }

    public function widget( $args, $instance ) {

        /** This filter is documented in wp-includes/default-widgets.php */
        $title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? \'\' : $instance[\'title\'], $instance, $this->id_base );

        /**
         * Filter the content of the Text widget.
         *
         * @since 2.3.0
         *
         * @param string    $widget_text The widget content.
         * @param WP_Widget $instance    WP_Widget instance.
         */
        $text = apply_filters( \'widget_text\', empty( $instance[\'text\'] ) ? \'\' : $instance[\'text\'], $instance );
        echo $args[\'before_widget\'];
        if ( ! empty( $title ) ) {
            echo $args[\'before_title\'] . $title . $args[\'after_title\'];
        } ?>
            // lots and lots of custom markup here…
            <div class="my-custom-textwidget"><?php echo !empty( $instance[\'filter\'] ) ? wpautop( $text ) : $text; ?></div>
        <?php
        echo $args[\'after_widget\'];
    }
}
不幸的是,我的类什么都不做,核心WordPress小部件仍然在使用。但我也不能完全错,因为没有错误,但我错在哪里呢?有没有办法避免引入新的小部件?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

想想看,为什么WordPress仅仅因为定义了额外的类就要做任何事情?

这不是魔法(既不是魔法魔法,也不是代码驱动的魔法)。文本小部件不会仅仅因为类存在而出现。WordPress加载时会运行wp_widgets_init(), 它执行register_widget(\'WP_Widget_Text\').

所以从技术上讲,你不能告诉它使用不同的类。您可以做的是注销本机类并注册自己的类。只要类输出相同的名称和设置,它实际上就无法与本机小部件区分开来。

结束

相关推荐

我应该编辑哪些PHP文件来更改帖子列表和查看页面?

我对WP完全陌生,但现在我遇到了一个情况,需要在我的magento商店中集成博客,以便我使用WP博客,现在我需要编辑blogs posts List page 和posts view page 我想通过编辑来完成此操作.php 文件,但我无法理解WP结构,也无法找到与帖子相关的确切文件。请帮我完成这个提前感谢