我编写了一个小部件,它基于类型下拉列表具有多种输出格式。我打算在左侧和右侧边栏上使用这个小部件。然而,问题是它只显示在左侧或右侧的一个侧栏上。我希望小部件显示在两侧栏上请在下面找到小部件代码:
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\');
问题是它只出现在侧栏上,而不是同时出现在两个侧栏上,尽管在后端我可以将小部件放在两个侧栏上
感谢您的回复,我正在注册我的小部件,但忘记粘贴它。然而,问题是小部件只显示在左侧或右侧的一个侧栏上,而不是同时显示在两侧栏上。我不知道我是否缺少一些配置选项来使我的小部件成为多个小部件。我肯定错过了什么!!!顺便问一下,我如何回复答案而不是编辑答案??
最合适的回答,由SO网友:xiarnousx 整理而成
在查看了我的小部件的wp\\u选项表和sidebars\\u小部件选项后,我发现我的小部件名称必须不以空格分隔,在我的情况下,它应该是anzima\\u posts\\u小部件,并且我必须在control\\u ops参数中包含基id作为第一个索引。
我发现的另一个问题让我看起来很傻!!!我的html模板文件有一次include\\u。
我真的很高兴我找到了答案