在插件中扩展核心类

时间:2012-05-09 作者:JackMahoney

您好,我正在编写一个插件,并希望在wp includes文件夹中扩展一个类。我的意思是

class my_class extends wp_includes_class_x{ ... }
然而,当我尝试这样做时,我得到了一个class x not found 错误,但我知道Wordpress正在使用该类。所以我试着include_once(path_to_class) 在我的插件文件中Cannot redeclare class 错误我应该打电话给include 在特别行动钩上?

我做错了什么?

谢谢各位

编辑

我的插件是OO,所以我调用$my_plugin = new My_Plugin_Class(); 在我的插件文件中。在这个主类中,我尝试实例化一个扩展wp\\u includes类的实例,我不想命名这个类,这样我就可以让我的项目感到意外了

$my_plugin = new My_Plugin_Class();

class My_Plugin_Class{

    public function __construct(){
    $wp_include_class_extension = new WP_Class_Extension();
    }

}

class WP_Class_Extension extends Some_Core_Class{
    public function __construct(){
    //blah blah
    }
}
//CAUSES ERROR class Some_Core_Class not found
编辑

找到了解决方案-请参阅下面的评论-感谢大家的帮助

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

这个Widgets API page on the Codex 有一个很好的扩展类的代码段(在本例中是WP\\u Widget类)。总的来说,这应该很清楚。确保您使用的是类的标准名称,并确保它是一个实际的类,而不仅仅是一个函数。

/**
 * Adds Foo_Widget widget.
 */
class Foo_Widget extends WP_Widget {

    /**
     * Register widget with WordPress.
     */
    public function __construct() {
        parent::__construct(
            \'foo_widget\', // Base ID
            \'Foo_Widget\', // Name
            array( \'description\' => __( \'A Foo Widget\', \'text_domain\' ), ) // Args
        );
    }

    /**
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args     Widget arguments.
     * @param array $instance Saved values from database.
     */
    public function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters( \'widget_title\', $instance[\'title\'] );

        echo $before_widget;
        if ( ! empty( $title ) )
            echo $before_title . $title . $after_title;
        ?>Hello, World!<?php
        echo $after_widget;
    }

    /**
     * Sanitize widget form values as they are saved.
     *
     * @see WP_Widget::update()
     *
     * @param array $new_instance Values just sent to be saved.
     * @param array $old_instance Previously saved values from database.
     *
     * @return array Updated safe values to be saved.
     */
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );

        return $instance;
    }

    /**
     * Back-end widget form.
     *
     * @see WP_Widget::form()
     *
     * @param array $instance Previously saved values from database.
     */
    public function form( $instance ) {
        if ( isset( $instance[ \'title\' ] ) ) {
            $title = $instance[ \'title\' ];
        }
        else {
            $title = __( \'New title\', \'text_domain\' );
        }
        ?>
        <p>
        <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\' ); ?></label> 
        <input class="widefat" id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>
        <?php 
    }

} // class Foo_Widget

// register Foo_Widget widget
add_action( \'widgets_init\', create_function( \'\', \'register_widget( "foo_widget" );\' ) );

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register