一个寄存器侧栏函数起作用,另一个不起作用?

时间:2011-03-28 作者:jwp

以下是如何在函数文件中设置代码:

register_sidebar(array(
    \'name\' => \'Latest Updates\',
    \'before_widget\' => \'<span>\',
    \'after_widget\' => \'</span>\',
    \'before_title\' => \'\',
    \'after_title\' => \'\'
));
register_sidebar(array(
    \'name\' => \'BBRB Loves (Video Width - 200px)\',
    \'before_widget\' => \'\',
    \'after_widget\' => \'\',
    \'before_title\' => \'\',
    \'after_title\' => \'\'
));
第一个register_sidebar 函数在标头中被调用。php和第二个函数在索引中被调用。php。当我打开和关闭<span> 第二个功能中的标签(即。before_widgetafter_widget), 输出正确的标记。但当我把同样的开始和结束<span> 标记在第一个函数中,只输出默认值<div class="textwidget">foobar</div>. 两者之间的唯一区别是,一个在标头中调用,另一个在索引中调用。然而,这两个小部件都显示在仪表板中,当我用文本填充它们时,它们都会被输出,而不是前/后标记。我做错了什么?

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

如果我不得不大胆猜测,问题是您的第一个register\\u提要栏()在函数中被调用。php,并连接到widgets\\u init,但第二个会在头部调用,因此不会连接到widgets\\u init。我不知道在widgets\\u init之外注册一个侧栏会有什么影响。

是否有任何特殊原因导致两个调用都不能在函数中调用。php并连接到widgets\\u init?

SO网友:Chris_O

您应该将所有边栏注册为一个函数,并将它们挂接到widgets\\u init中。

如果你想摆脱<div class="text_widget"> </div> 您必须编写自己的文本小部件,因为它没有过滤器。

在wp中包括/默认小部件。php文本小部件是如何构建的:

/**
 * Text widget class
 *
 * @since 2.8.0
 */
class WP_Widget_Text extends WP_Widget {

    function WP_Widget_Text() {
        $widget_ops = array(\'classname\' => \'widget_text\', \'description\' => __(\'Arbitrary text or HTML\'));
        $control_ops = array(\'width\' => 400, \'height\' => 350);
        $this->WP_Widget(\'text\', __(\'Text\'), $widget_ops, $control_ops);
    }

    function widget( $args, $instance ) {
        extract($args);
        $title = apply_filters( \'widget_title\', empty($instance[\'title\']) ? \'\' : $instance[\'title\'], $instance, $this->id_base);
        $text = apply_filters( \'widget_text\', $instance[\'text\'], $instance );
        echo $before_widget;
        if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
            <div class="textwidget"><?php echo $instance[\'filter\'] ? wpautop($text) : $text; ?></div>
        <?php
        echo $after_widget;
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance[\'title\'] = strip_tags($new_instance[\'title\']);
        if ( current_user_can(\'unfiltered_html\') )
            $instance[\'text\'] =  $new_instance[\'text\'];
        else
            $instance[\'text\'] = stripslashes( wp_filter_post_kses( addslashes($new_instance[\'text\']) ) ); // wp_filter_post_kses() expects slashed
        $instance[\'filter\'] = isset($new_instance[\'filter\']);
        return $instance;
    }

    function form( $instance ) {
        $instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'text\' => \'\' ) );
        $title = strip_tags($instance[\'title\']);
        $text = esc_textarea($instance[\'text\']);
?>
        <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>

        <textarea class="widefat" rows="16" cols="20" id="<?php echo $this->get_field_id(\'text\'); ?>" name="<?php echo $this->get_field_name(\'text\'); ?>"><?php echo $text; ?></textarea>

        <p><input id="<?php echo $this->get_field_id(\'filter\'); ?>" name="<?php echo $this->get_field_name(\'filter\'); ?>" type="checkbox" <?php checked(isset($instance[\'filter\']) ? $instance[\'filter\'] : 0); ?> />&nbsp;<label for="<?php echo $this->get_field_id(\'filter\'); ?>"><?php _e(\'Automatically add paragraphs\'); ?></label></p>
<?php
    }
}
您可以重用一些代码来创建自己版本的文本小部件,只需确保不使用任何相同的类或函数名即可。

结束

相关推荐

Why use widgets?

我对使用WordPress很陌生,我想知道使用小部件的好处是什么?看here 这听起来像是为那些不是程序员的人准备的,他们想在他们的网站上添加插件。对吗?或者小部件是否在某种程度上使站点更加健壮?