Single Widget Multi Sidebar

时间:2012-08-15 作者:xiarnousx

我编写了一个小部件,它基于类型下拉列表具有多种输出格式。我打算在左侧和右侧边栏上使用这个小部件。然而,问题是它只显示在左侧或右侧的一个侧栏上。我希望小部件显示在两侧栏上请在下面找到小部件代码:

 class Posts_Widgets extends WP_Widget{

  function __construct(){
    $id = "posts_widgets";
    $name = "Anzima Posts Widgets";
    $widgets_ops = array(\'description\'=>__(\'Widget for displaying various posts formats\'));
    $control_ops = array(\'width\' => 400, \'height\' => 350);
    parent::__construct($id,$name,$widgets_ops);
  }

  function form($instance){
    $title = esc_attr($instance[\'title\']);
    $cats  = esc_attr($instance[\'cats\']);
    $type  = esc_attr($instance[\'type\']);
    ?>
         <p>
            <label for="<?php echo $this->get_field_id(\'title\'); ?>" ><?php _e(\'Title\'); ?>:
            <input type="text" class="widefat" id="<?php echo $this->get_field_id(\'title\'); ?>" 
              name="<?php echo $this->get_field_name(\'title\');?>" value="<?php echo esc_attr($title);?>" />
            </label>
         </p>

         <p>
            <label for="<?php echo $this->get_field_id(\'cats\'); ?>" ><?php _e(\'Post Categories\'); ?>:
            <select class="widefat" id="<?php echo $this->get_field_id(\'cats\'); ?>" name="<?php echo $this->get_field_name(\'cats\')?>" >
            <?php $cats_a = $this->get_category(); ?>
            <option value="" ><?php _e(\'Please select an option\'); ?></option>
            <option value="x" <?php if($cats == \'x\'){?>selected="selected"<?php }?> ><?php _e(\'Most Read\'); ?></option>
            <?php foreach($cats_a as $o){ ?>
                <option <?php if($cats == $o->id){?>selected="selected"<?php }?> value="<?php echo $o->id; ?>"><?php echo $o->name; ?></option>
            <?php } ?>
            </select>
            </label>
         </p>

         <p>
            <label for="<?php echo $this->get_field_id(\'type\'); ?>" ><?php _e(\'Display Type\'); ?>:
            <select class="widefat" id="<?php echo $this->get_field_id(\'type\'); ?>" name="<?php echo $this->get_field_name(\'type\')?>" >
               <option value="" ><?php _e(\'Please select an option\'); ?></option>
               <option <?php if($type == 1){?>selected="selected"<?php }?> value="1" ><?php echo _e(\'Main Plus Thumbs List\'); ?></option>
               <option <?php if($type == 2){?>selected="selected"<?php }?> value="2" ><?php echo _e(\'Item List\'); ?></option>
               <option <?php if($type == 3){?>selected="selected"<?php }?> value="3" ><?php echo _e(\'Main Plus List\'); ?></option>
               <option <?php if($type == 4){?>selected="selected"<?php }?> value="4" ><?php echo _e(\'Grid\'); ?></option>
               <option <?php if($type == 5){?>selected="selected"<?php }?> value="4" ><?php echo _e(\'Single Post\'); ?></option>
            </select>
            </label>
         </p>
    <?php 
  }

  function update($new_instance,$old_instance){
    $instance = $old_instance;
    $instance[\'title\'] = strip_tags($new_instance[\'title\']);
    $instance[\'cats\'] = strip_tags($new_instance[\'cats\']);
    $instance[\'type\'] = strip_tags($new_instance[\'type\']);
   return $instance;
  }

  function widget($args, $instance) {
      extract($args, EXTR_SKIP);
      $data = array();
      if($instance[\'cats\'] != \'x\'){
        $data[\'title\'] = get_cat_name($instance[\'cats\']);
        $data[\'image\'] = ((is_file(TEMPLATEPATH . \'/images/\'.$instance[\'cats\'].\'.png\'))?get_bloginfo(\'stylesheet_directory\') . \'/images/\'.$instance[\'cats\'].\'.png\':\'\');
      }else{
        $data[\'title\'] = \'most read\';
        $data[\'image\'] = get_bloginfo(\'stylesheet_directory\') . \'/images/most-read.png\';
      }
      $data[\'id\'] = $instance[\'cats\'];
      $data[\'list\'] = $this->get_list($instance[\'cats\'],$instance[\'type\']);
      include_once TEMPLATEPATH . \'/widgets/templates/\'.$instance[\'type\'].\'.php\';
  }
  }
?>
提前感谢您的大力帮助


闪烁光标;我正在注册小部件,只是忘了粘贴它

function reg_post_widget(){
register_widget( \'Posts_Widgets\' );
}
add_action( \'widgets_init\',\'reg_post_widget\');
问题是它只出现在侧栏上,而不是同时出现在两个侧栏上,尽管在后端我可以将小部件放在两个侧栏上

感谢您的回复,我正在注册我的小部件,但忘记粘贴它。然而,问题是小部件只显示在左侧或右侧的一个侧栏上,而不是同时显示在两侧栏上。我不知道我是否缺少一些配置选项来使我的小部件成为多个小部件。我肯定错过了什么!!!顺便问一下,我如何回复答案而不是编辑答案??

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

在查看了我的小部件的wp\\u选项表和sidebars\\u小部件选项后,我发现我的小部件名称必须不以空格分隔,在我的情况下,它应该是anzima\\u posts\\u小部件,并且我必须在control\\u ops参数中包含基id作为第一个索引。

我发现的另一个问题让我看起来很傻!!!我的html模板文件有一次include\\u。

我真的很高兴我找到了答案

结束

相关推荐

changing wp-admin/widgets.php

我们希望在管理面板中设计小部件页面时有所不同,主要是为了帮助站点管理员了解每个小部件在站点中的显示位置:为此,我们需要更改小部件所使用的HTML。php呈现(仅仅更改css是不够的)。我们如何在不触及核心的情况下做到这一点?