Widgets won't save

时间:2015-01-01 作者:Marnix Bent

我几乎没有创建widget区域的经验,我一直在将widget保存在widget区域的“红色菜单”中。我已经搜索了十几篇帖子,但似乎都没找到。

我目前在Wordpress 4.0.1中工作,这是我的代码:

小部件。php:

class Red_Menu_Widget extends WP_Widget {
    function redmenu_widget( $args, $instance ) {
         $widget_ops = array(
         \'classname\' => \'redmenu_widget\',
         \'description\' => __(\'Description in here\')
         $control_ops = array( \'width\' => 300, \'height\' => 350, \'id_base\' => \'redmenu_widget\' );  

        $this->WP_Widget( \'redmenu_widget\', __(\'Rood menu rechts\', \'redmenu_widget\'), $widget_ops, $control_ops );  
         );
        //parent::WP_Widget(false, \'Rood menu (rechts)\', $widget_ops );
    }
    function widget() { 
        $title = \'Rood menu (rechts)\';

        echo $before_widget;  
        echo $title;         
        echo \'<p>This is my widget output</p>\';
        echo $after_widget;  
    }
}
add_action( \'widgets_init\', \'prefix_register_widgets\' );
function prefix_register_widgets() {
    register_widget( \'redmenu_widget\' );
}
功能。php:

function pfp_widgets_init() {

  register_sidebar( array (
  \'name\' => __( \'Rood menu (rechts)\', \'powerforpaws\' ),
  \'id\' => \'redmenu_widget\',
  \'description\'   => __( \'Descriptionhere\', \'powerforpaws\' ),
  \'before_widget\' => \'<li id="%1$s" class="widget-container %2$s">\',
  \'after_widget\' => "</li>",
  \'before_title\' => \'<h3 class="widget-title">\',
  \'after_title\' => \'</h3>\',
  ) );
} // end pfp_widgets_init

add_action( \'widgets_init\', \'pfp_widgets_init\' );

// Pre-set Widgets
$preset_widgets = array (
        \'redmenu_widget\'  => array( \'search\', \'pages\', \'categories\', \'archives\' )
);

if ( !isset( $_GET[\'activated\'] ) ) {
        update_option( \'sidebars_widgets\', $preset_widgets );
}
侧栏。php:

<aside id="widgets"> 
    <?php if ( !function_exists(\'redmenu_widget\') || !dynamic_sidebar(\'redmenu_widget\') ) : ?>
        <div id="primary" class="widget-area">
            <ul class="xoxo">
                <?php dynamic_sidebar(\'redmenu_widget\'); ?>
            </ul>
        </div><!-- #primary .widget-area -->
        <?php endif; ?>   
</aside>
我做错了什么?

提前感谢!

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

这行代码不正确

<?php if ( !function_exists(\'redmenu_widget\') || !dynamic_sidebar(\'redmenu_widget\') ) : ?>
更重要的是,负操作符(!) 这里是错的

这行代码简单地转换为

如果功能redmenu_widget 不存在或如果侧栏redmenu_widget 不存在,请执行某些操作

您只需放下操作员和!function_exists(\'redmenu_widget\') 部分您还应该检查侧栏是否处于活动状态。这部分代码应该如下所示

<aside id="widgets"> 
    <?php if ( is_active_sidebar(\'redmenu_widget\') ) : ?>
        <div id="primary" class="widget-area">
            <ul class="xoxo">
                <?php dynamic_sidebar(\'redmenu_widget\'); ?>
            </ul>
        </div><!-- #primary .widget-area -->
        <?php endif; ?>   
</aside>
此外,不幸的是,您的小部件是一团乱麻。有很多错误。您应该检查Widget API 以及如何正确创建小部件。此外,在注册小部件时,您希望使用类名。

根据您的评论编辑,您需要一个自定义文本小部件。要实现这一点,只需复制默认文本小部件并根据需要进行自定义。这是默认的文本小部件,我已经重命名了它,所以你可以复制并粘贴到你的主题中

class Red_Menu_Widget extends WP_Widget { 

    public function __construct() { 
        $widget_ops = array( \'classname\' => \'redmenu_widget\', \'description\' =>  __(\'Rood menu rechts\', \'redmenu_widget\') ); 
        $control_ops = array( \'width\' => 400, \'height\' => 350 ); 
        parent::__construct( \'redmenu_widget\', __(\'Rood menu rechts\', \'redmenu_widget\'),  $widget_ops, $control_ops ); 
    } 

    public function widget( $args, $instance ) { 

        /** This filter is documented in wp-includes/default-widgets.php */ 
        $title = apply_filters( \'widget_title\', empty( $instance[\'title\'] ) ? \'\' : $instance[\'title\'], $instance, $this->id_base ); 

        /** 
         * Filter the content of the Text widget. 
         * 
         * @since 2.3.0 
         * 
         * @param string    $widget_text The widget content. 
         * @param WP_Widget $instance    WP_Widget instance. 
         */ 
        $text = apply_filters( \'widget_text\', empty( $instance[\'text\'] ) ? \'\' : $instance[\'text\'], $instance ); 
        echo $args[\'before_widget\']; 
        if ( ! empty( $title ) ) { 
            echo $args[\'before_title\'] . $title . $args[\'after_title\']; 
        } ?> 
            <div class="textwidget"><?php echo !empty( $instance[\'filter\'] ) ? wpautop( $text ) : $text; ?></div> 
        <?php 
        echo $args[\'after_widget\']; 
    } 

    public 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; 

    public 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 
    } 
 } 
然后注册它

add_action( \'widgets_init\', \'prefix_register_widgets\' );
function prefix_register_widgets() {
    register_widget( \'Red_Menu_Widget\' );
}
您可以根据问题中的示例注册侧栏(只需更改id,因为它可能会与您的小部件产生冲突,可以这样称呼它redmenu-sidebar) 然后在模板文件中调用侧栏,如下所示

<aside id="widgets"> 
    <?php if ( is_active_sidebar( \'redmenu_sidebar\' ) ) : ?>
        <div id="primary" class="widget-area">
            <ul class="xoxo">
                <?php dynamic_sidebar(\'redmenu_sidebar\'); ?>
            </ul>
        </div><!-- #primary .widget-area -->
        <?php endif; ?>   
</aside>
这应该能帮到你。修改代码和小部件以满足您的需要

SO网友:Fatih SARI

首先,您应该删除(!) 替换redmenu_widget 具有redmenuWidget. 因为(\\u)未在小部件段塞中使用

结束

相关推荐

Multiple widgets in wordpress

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