Help with custom widget

时间:2014-11-04 作者:Aaron Schafer

我尝试过创建自定义小部件的方法,但没有成功。我正在寻找“widgetize”一个模板,并允许最终用户只更新widgetized区域中的文本。看着codex,这似乎是非常枯燥的,但我似乎无法获得任何输出。小部件出现在管理面板中,我可以存储文本,只是没有输出。我确信我遗漏了一些明显的东西。

以下是插件:(代码更新)

class Header_Slide extends WP_Widget {

/**
 * Register widget with WordPress.
 */
function __construct() {
    parent::__construct(
        \'header_slide\', // Base ID
        __(\'Header Slide\', \'text_domain\'), // Name
        array( \'description\' => __( \'Use this widget to edit the first slider section\', \'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\'];

    ?>

    <div id="form_slider" data-anchor="form_slider">
        <ul class="form-bxslider list-unstyled">                
            <li>
                <div class=\'list-forstart fin_1\'>
                    <h2 class=\'h-Bold\'>
                        <?php           
                        if ( ! empty ($instance[\'headline1\'])) {
                            echo $instance[\'headline1\'];                        
                        };
                        ?>
                    </h2>
                    <p class=\'desc\'>
                        <?php
                        if (!empty ($instance[\'blurb1\'])) {                     
                            echo $instance[\'blurb1\'];
                        };
                        ?>
                    </p>
                </div>
                <div class=\'img-slider hidden-xs slide-man1 fin_2\'></div>
            </li>
            <li>
                <div class=\'list-forstart fin_1\'>
                    <h2 class=\'h-Bold\'>
                        <?php
                            if (!empty ($instance[\'headline2\'])) {
                                echo $instance[\'headline2\'];
                            };
                        ?>
                    </h2>
                    <p class=\'desc\'>
                        <?php
                            if (!empty ($instance[\'blurb2\'])) {                     
                                echo $instance[\'blurb2\'];
                            };
                        ?>
                    </p>
                </div>
                <div class=\'img-slider hidden-xs slide-man2 fin_2\'></div>
            </li>
            <li>
                <div class=\'list-forstart fin_1\'>
                    <h2 class=\'h-Bold\'>
                        <?php
                            if (!empty ($instance[\'headline3\'])) {
                                    echo $instance[\'headline3\'];
                            };
                        ?>
                    </h2>
                    <p class=\'desc\'>
                        <?php
                            if (!empty ($instance[\'blurb3\'])) {                     
                                echo $instance[\'blurb3\'];
                            };
                        ?>
                    </p>
                </div>
                <div class="img-slider hidden-xs slide-man3 fin_2"></div>
            </li>
        </ul>
         <div class="bx-controls bx-has-pager bx-has-controls-direction" id=\'dafault_pager\'>
            <div class="bx-pager bx-default-pager">
                <div class="bx-pager-item">
                    <a class="bx-pager-link  active" data-slide-index="0" href="#"><span></span></a>
                </div>
                <div class="bx-pager-item">
                    <a class="bx-pager-link  " data-slide-index="1" href="#"><span></span></a>
                </div>
                <div class="bx-pager-item lastItem">
                    <a class="bx-pager-link " data-slide-index="2" href="#"><span></span></a>
                </div>
            </div>
        </div>

        <div class="clearfix visible-xs visible-md"></div>

    </div>
<?php

echo $args[\'after_widget\'];                 

}

/**
 * Back-end widget form.
 *
 * @see WP_Widget::form()
 *
 * @param array $instance Previously saved values from database.
 */
public function form( $instance ) {
    if ( isset( $instance[ \'headline1\' ] ) ) {
        $headline1 = $instance[ \'headline1\' ];
    }
    else {
        $headline1 = __( \'New Headline1\', \'text_domain\' );
    }
    if ( isset( $instance[ \'blurb1\' ] ) ) {
        $blurb1 = $instance[ \'blurb1\' ];
    }
    else {
        $blurb1 = __( \'New Blurb1\', \'text_domain\' );
    }
    if ( isset( $instance[ \'headline2\' ] ) ) {
        $headline2 = $instance[ \'headline2\' ];
    }
    else {
        $headline2 = __( \'New Headline2\', \'text_domain\' );
    }
    if ( isset( $instance[ \'blurb2\' ] ) ) {
        $blurb2 = $instance[ \'blurb2\' ];
    }
    else {
        $blurb2 = __( \'New Blurb2\', \'text_domain\' );
    }
    if ( isset( $instance[ \'headline3\' ] ) ) {
        $headline3 = $instance[ \'headline3\' ];
    }
    else {
        $headline3 = __( \'New Headline3\', \'text_domain\' );
    }
    if ( isset( $instance[ \'blurb3\' ] ) ) {
        $blurb3 = $instance[ \'blurb3\' ];
    }
    else {
        $blurb3 = __( \'New Blurb3\', \'text_domain\' );
    }
    ?>
    <p>
    <label for="<?php echo $this->get_field_id( \'headline1\' ); ?>"><?php _e( \'Headline1:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'headline1\' ); ?>" name="<?php echo $this->get_field_name( \'headline1\' ); ?>" type="text" value="<?php echo esc_attr( $headline1 ); ?>">
    </p>
    <p>
    <label for="<?php echo $this->get_field_id( \'blurb1\' ); ?>"><?php _e( \'Blurb1:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'blurb1\' ); ?>" name="<?php echo $this->get_field_name( \'blurb1\' ); ?>" type="text" value="<?php echo esc_attr( $blurb1 ); ?>">
    </p>
    <p>
    <label for="<?php echo $this->get_field_id( \'headline2\' ); ?>"><?php _e( \'Headline2:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'headline2\' ); ?>" name="<?php echo $this->get_field_name( \'headline2\' ); ?>" type="text" value="<?php echo esc_attr( $headline2 ); ?>">
    </p>
    <p>
    <label for="<?php echo $this->get_field_id( \'blurb2\' ); ?>"><?php _e( \'Blurb2:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'blurb2\' ); ?>" name="<?php echo $this->get_field_name( \'blurb2\' ); ?>" type="text" value="<?php echo esc_attr( $blurb2 ); ?>">
    </p>
    <p>
    <label for="<?php echo $this->get_field_id( \'headline3\' ); ?>"><?php _e( \'Headline3:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'headline3\' ); ?>" name="<?php echo $this->get_field_name( \'headline3\' ); ?>" type="text" value="<?php echo esc_attr( $headline3 ); ?>">
    </p>
    <p>
    <label for="<?php echo $this->get_field_id( \'blurb3\' ); ?>"><?php _e( \'Blurb3:\' ); ?></label> 
    <input class="widefat" id="<?php echo $this->get_field_id( \'blurb3\' ); ?>" name="<?php echo $this->get_field_name( \'blurb3\' ); ?>" type="text" value="<?php echo esc_attr( $blurb3 ); ?>">
    </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[\'headline1\'] = ( ! empty( $new_instance[\'headline1\'] ) ) ? strip_tags( $new_instance[\'headline1\'] ) : \'\';
    $instance[\'blurb1\'] = ( ! empty( $new_instance[\'blurb1\'] ) ) ? strip_tags( $new_instance[\'blurb1\'] ) : \'\';
    $instance[\'headline2\'] = ( ! empty( $new_instance[\'headline2\'] ) ) ? strip_tags( $new_instance[\'headline2\'] ) : \'\';
    $instance[\'blurb2\'] = ( ! empty( $new_instance[\'blurb2\'] ) ) ? strip_tags( $new_instance[\'blurb2\'] ) : \'\';
    $instance[\'headline3\'] = ( ! empty( $new_instance[\'headline3\'] ) ) ? strip_tags( $new_instance[\'headline3\'] ) : \'\';
    $instance[\'blurb3\'] = ( ! empty( $new_instance[\'blurb3\'] ) ) ? strip_tags( $new_instance[\'blurb3\'] ) : \'\';

    return $instance;
}

} // class Header_Slide
function register_widgets() {
register_widget( \'header_slide\' );
}
add_action( \'widgets_init\', \'register_widgets\' );
`

在输出页面上,我有:

<?php the_widget( \'header_slide\'); ?>

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

您的代码看起来好多了,所有的bug都已修复:-)。(警告:我没有逐行检查您的代码,只是快速测试了一下)

然而,您还遗漏了两个问题,这都来自于您重命名小部件的时候

  • register_widget( \'header_slide\' ); 应该是register_widget( \'Header_Slide\' );

  • the_widget( \'header_slide\'); 应该是the_widget( \'Header_Slide\');

    请参见the_widget() 以及如何使用。举个例子,下面

    the_widget( \'Header_Slide\', \'headline1=HEADLINE1&blurb1=BLURB1\');
    
    将输出

    头条新闻1

    BLURB1

    但我不会使用the_widget() 要显示小部件,我宁愿创建一个侧栏,然后将小部件放在那里。

    您可以有条件地为模板的特定页面注册侧栏

结束

相关推荐

Multiple widgets in wordpress

我已经创建了一个wordpress小部件。它在小部件选项中有一个下拉列表。下拉列表包含“facebook”和“twitter”。如果管理员选择“twitter”,那么twitter关注者计数将显示在小部件中,与facebook的情况类似。使用jquery,该计数显示在id为“social count”的div中。当页面加载时,jquery ajax将获取计数并将其插入到“社交计数”中。问题是它在单个实例中运行良好。但是,如果在侧栏中添加了2个实例,则在这两个实例中都会显示最新的计数,因为我使用的是$(“.