以编程方式添加小部件

时间:2012-04-02 作者:Tabrez Ahmed

我想以编程方式将小部件添加到wordpress站点。我从中尝试了以下代码codex docs:

class MyNewWidget extends WP_Widget {

    function MyNewWidget() {
        // Instantiate the parent object
        parent::__construct( false, \'My New Widget Title\' );
    }

    function widget( $args, $instance ) {
        // Widget output
    }

    function update( $new_instance, $old_instance ) {
        // Save widget options
    }

    function form( $instance ) {
        // Output admin widget options form
    }
}

function myplugin_register_widgets() {
    register_widget( \'MyNewWidget\' );
}

add_action( \'widgets_init\', \'myplugin_register_widgets\' );
但似乎不起作用。我甚至试过这个问题的代码Programmatically add widgets to sidebars 但无济于事。如果我遗漏了什么,请告诉我。

谢谢你

2 个回复
SO网友:maverick

因为您的代码就像原型一样,所以它不会显示任何内容。这就是为什么您在仪表板中看不到任何内容。

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

    /**
     * Register widget with WordPress.
     */
    function __construct() {
        parent::__construct(
            \'foo_widget\', // Base ID
            esc_html__( \'Widget Title\', \'text_domain\' ), // Name
            array( \'description\' => esc_html__( \'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 ) {
        echo $args[\'before_widget\'];
        if ( ! empty( $instance[\'title\'] ) ) {
            echo $args[\'before_title\'] . apply_filters( \'widget_title\', $instance[\'title\'] ) . $args[\'after_title\'];
        }
        echo esc_html__( \'Hello, World!\', \'text_domain\' );
        echo $args[\'after_widget\'];
    }

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

    /**
     * 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\'] = ( ! empty( $new_instance[\'title\'] ) ) ? sanitize_text_field( $new_instance[\'title\'] ) : \'\';

        return $instance;
    }

} // class Foo_Widget

// register Foo_Widget widget
function register_foo_widget() {
    register_widget( \'Foo_Widget\' );
}
add_action( \'widgets_init\', \'register_foo_widget\' );
我刚从wordpress复制了这段代码。org,但您可以根据需要对其进行修改。如果需要更多帮助,请回复

SO网友:Adam Seabridge

下面是一个应与最新版本的wordpress配合使用的示例:

 class MyNewWidget extends WP_Widget {
        function MyNewWidget() {
            parent::WP_Widget(false, \'My New Widget\');
        }
        function form($instance) {
            // outputs the options form on admin
        }
        function update($new_instance, $old_instance) {
            // processes widget options to be saved
            return $new_instance;
        }
        function widget($args, $instance) {
            echo(\'<span>this is my widget</span>\');
        }
    }
    register_widget(\'MyNewWidget\');

结束

相关推荐

Adding content to sidebars

我正在设计一个三栏布局,根据主栏中的帖子/页面,所有三栏都有不同的内容。我如何才能改变和更新侧边栏内容,并使用以下内容在模板中显示它<?php the_content() ?> ? 由于侧边栏内容与帖子相关,我需要一种方法来引用帖子的右侧侧边栏内容。提前感谢诚挚的nav