我正在尝试更改默认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小部件仍然在使用。但我也不能完全错,因为没有错误,但我错在哪里呢?有没有办法避免引入新的小部件?