创建具有多个自定义字段的小部件

时间:2015-08-06 作者:user1486133

我正在尝试创建一些自定义小部件。

我已经创建了一个,它只需要一个不同的标题字段。然而,当我尝试创建一个允许我有多个字段的小部件时,我现在陷入了困境。我需要小部件的以下字段:

我希望小部件表单允许用户使用文本更新上面的字段。然后,我想输出他们在我的侧边栏小部件中编写的文本。

我有以下代码,这是我之前制作的小部件的代码(除了标题之外没有其他字段)

class registercv_widget extends WP_Widget {

        function __construct() {
            parent::__construct(
                \'registercv_widget\',
                __(\'Register CV Widget\', \'registercv_widget_domain\'),
                array( \'description\' => __( \'Provides a "Register CV" button which launches a pop-up\', \'registercv_widget_domain\' ), )
            );
        }

        public function widget( $args, $instance ) {
            $title = apply_filters( \'widget_title\', $instance[\'title\'] );
            echo $args[\'before_widget\'];
            echo \'<div class="widget-wrapper">\';
            if ( ! empty( $title ) )
                echo $args[\'before_title\'] . $title . $args[\'after_title\'];

    // This is where you run the code and display the output
            echo __( \'<div class="register-button"><span><div class="button white">Send your CV</div></span></div>\', \'registercv_widget_domain\' );
            echo \'</div>\';
            echo $args[\'after_widget\'];
        }

    // Widget Backend
        public function form( $instance ) {
            if ( isset( $instance[ \'title\' ] ) ) {
                $title = $instance[ \'title\' ];
            }
            else {
                $title = __( \'Register as a candidate\', \'registercv_widget_domain\' );
            }
    // Widget admin form
            ?>
            <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
        }

    // Updating widget replacing old instances with new
        public function update( $new_instance, $old_instance ) {
            $instance = array();
            $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';
            return $instance;
        }
    }

    function registercv_load_widget() {
        register_widget( \'registercv_widget\' );
    }
    add_action( \'widgets_init\', \'registercv_load_widget\' );
这很好,但是how can I add extra fields to this?

我已尝试复制的所有实例$title 再做一次$text_one 但我不明白这个领域是如何注册的。有人能帮忙吗?

1 个回复
SO网友:Domain

我假设您希望在小部件后端表单中添加更多自定义字段,为此,您只需要在中创建一个新字段form( $instance ); 作用

所以代码看起来像

        // Widget Backend
        public function form( $instance ) {
            if ( isset( $instance[ \'title\' ] ) ) {
                $title = $instance[ \'title\' ];
            }
            else {
                $title = __( \'Register as a candidate\', \'registercv_widget_domain\' );
            }

            if ( isset( $instance[ \'name\' ] ) ) {
                $name = $instance[ \'name\' ];
            }
            else {
                $name = __( \'Enter your name\', \'registercv_widget_domain\' );
            }

            // Widget admin form
            ?>
            <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>

             <p>
                <label for="<?php echo $this->get_field_id( \'name\' ); ?>"><?php _e( \'Name:\' ); ?></label>
                <input class="widefat" id="<?php echo $this->get_field_id( \'name\' ); ?>" name="<?php echo $this->get_field_name( \'name\' ); ?>" type="text" value="<?php echo esc_attr( $name ); ?>" />
            </p>
        <?php
        }
上述代码将在表单中创建一个新字段。接下来,我们需要在数据库中保存/更新此新字段的值,请遵循以下代码:

// Updating widget replacing old instances with new
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';

        $instance[\'name\'] = ( ! empty( $new_instance[\'name\'] ) ) ? strip_tags( $new_instance[\'name\'] ) : \'\';
        return $instance;
    }

结束

相关推荐

customize footer widgets area

我有一个自定义的页脚小部件区域,它在一行中水平显示最多4个小部件。如果我添加了4个以上的小部件,那么布局就会中断,因为我试图在同一行中显示它。我想让它更灵活,例如有2行(div),我可以在第一行中添加let’s 2 widget,在第二行中添加4个widget。可能我需要的是复制这一个,并制作两个页脚区域。这可能吗?如果可能,我如何实现?下面是我的小部件的实际代码。php: /* Footer Widgets */ $footer_widgets_num = wp_get_sidebars_