WordPress - 小部件()函数

时间:2017-04-11 19:32:17

标签: php wordpress widget

我正在尝试对wordpress小部件进行编码,但小部件功能中的$instance变量为空,但我不知道原因。

class mi_widget extends WP_Widget {    
    public function __construct () {
       // instrucciones para esta función
        parent::__construct(
            'mi_widget', // $id_base
            'Soy un widget formidable', // $name
            array( 'description' => __( 'Widget formidable que hace maravillas', 'mi-widget' ), ) // $widget_options
        );
    }
    public function widget ($args, $instance) {
        // instrucciones para esta función
        extract($args);
        echo $before_widget.$before_title;
        echo print_r($instance['mi_campo']);
        echo $after_title.$after_widget;
    }
    public function update ($new_instance, $old_instance) {
        // instrucciones para esta función
        $instance = array();
        $instance['mi_campo'] = strip_tags( $new_instance['mi_campo'] );
        return $instance;
    }
    public function form($instance) {
        // instrucciones para esta función
        if ( isset( $instance[ 'mi_campo' ] ) ) {
            $mi_campo = $instance[ 'mi_campo' ];
        }
        else {
            $mi_campo = __( 'Valor por defecto', 'mi-widget' );
        }
        ?>
        <p>
            <label for="<?php echo $this->get_field_id( 'mi_campo' );  ?>"><?php _e('T&iacute;tulo:', 'mi-widget'); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id( 'mi_campo' ); ?>" name="<?php echo $this->get_field_name ( 'mi_campo' ); ?>" type="text" value="<?php echo esc_attr ($mi_campo); ?>" />
        </p>
        <?php
    }
    function get_field_name($field_name) {
        return 'widget-' . $this->id_base . '[' . $this->number . '][' . $field_name . ']';
    }
    function get_field_id($field_name) {
        return 'widget-' . $this->id_base . '-' . $this->number . '-' . $field_name;
    }

} // Cierra la clase

我在侧边栏之外使用小部件,我在front-page.php中使用此代码:

<?php the_widget( 'mi_widget' ); ?> 

我正在我的functions.php文件中注册这样的小部件:

function wpb_load_widget() {
    register_widget('mi_widget');
    register_sidebar(
        array(
            'name'=>'Home Widgets',
            'id'=>'sidebar-1',
            'class'=>'custome',
            'description'=>'Here you can set the widgets that you want to display in home page.'
        )
    );
}
add_action( 'widgets_init', 'wpb_load_widget' );

1 个答案:

答案 0 :(得分:0)

如果您将小部件放入侧边栏并填写其表单,则会填充

$ instance。如果您使用the_widget函数直接调用窗口小部件,则应将$ instance作为第二个参数传递。例如,以下代码:

the_widget('mi_widget', array('mi_campo'=>'blahblah'))

有关页面信息,请参阅此链接:https://codex.wordpress.org/Function_Reference/the_widget

我希望它有所帮助。