Wordpress 自定义小部件不会保存值
Wordpress custom widget will not save values
您好,我是 Wordpress 的新手,我正在尝试制作自定义小部件。我可以让表单显示并输入值,但是每当我按保存时,小部件都会恢复为默认值。我也尝试在辅助功能模式下添加值,但无济于事。
这是我的小部件的副本 class:
function loadsidewidget()
{
register_widget('WP_Widget_sidebar_textwidget');
}
add_action('widgets_init', 'loadsidewidget');
class WP_Widget_sidebar_textwidget extends WP_Widget
{
function __construct() {
parent::__construct(
'WP_Widget_sidebar_textwidget',
__('Sidebar Textwdiget','sidewidget_domain'),
array( 'description' => __( 'Sample widget' ,'sidewidget_domain'), )
);
}
public function widget($args, $instance)
{
extract( $args );
extract($instance);
$title = apply_filters('widget_title',$instance['title']);
$show_info = isset( $instance['textarea'] ) ? $instance['textarea'] :'';
echo $args['before_widget'];
if(!empty($title))
{
echo $args['before_title'];
echo '<i class="fa fa-align-left"></i>'.$title;
echo $args['after_title'];
}
echo '<p>'.$instance['textarea'].'</p>';
}
public function update($new_instance, $old_instance)
{
$instance =$old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['textarea'] = esc_textarea($new_instance['textarea']);
return $instance;
}
//backend
public function form($instance)
{
$instance = wp_parse_args(array($intsance),array('title'=>'Title','textarea'=>'default'));
if(isset($instance['title']))
{
$title = strip_tags($instance['title']);
}
else
{
$title = 'Title';
}
$titleId = $this->get_field_id( 'title' );
$titleName = $this->get_field_name( 'title' );
$text = $instance['textarea'];
$contentId = $this->get_field_id( 'textarea' );
$contentName = $this->get_field_name( 'textarea' );
?>
<p>
<label for="<?php echo $titleId; ?>"><?php echo __('Title','sidewidget_domain');?></label>
<input class="widefat" id="<?php echo $titleId;?>" name="<?php echo $titleName;?>" value="<?php echo $title;?>"/>
</p>
<p>
<label for="<?php echo $contentId?>"><?php echo __('Content','sidewidget_domain');?></label>
<textarea class="widefat" id="<?php echo $contentId;?>" name="<?php echo $contentName;?>"><?php echo $text;?></textarea>
</p>
<h1><?php echo $instance['textarea'];?></h1>
<?php
}
}
我感觉这与基本小部件 ID 有关,但我不确定。
我弄明白了,问题出在这一行 $instance = wp_parse_args(array($intsance),array('title'=>'Title','textarea'=>'default'));
if(isset($instance['title']));
,我删除了它,它起作用了。
您好,我是 Wordpress 的新手,我正在尝试制作自定义小部件。我可以让表单显示并输入值,但是每当我按保存时,小部件都会恢复为默认值。我也尝试在辅助功能模式下添加值,但无济于事。
这是我的小部件的副本 class:
function loadsidewidget()
{
register_widget('WP_Widget_sidebar_textwidget');
}
add_action('widgets_init', 'loadsidewidget');
class WP_Widget_sidebar_textwidget extends WP_Widget
{
function __construct() {
parent::__construct(
'WP_Widget_sidebar_textwidget',
__('Sidebar Textwdiget','sidewidget_domain'),
array( 'description' => __( 'Sample widget' ,'sidewidget_domain'), )
);
}
public function widget($args, $instance)
{
extract( $args );
extract($instance);
$title = apply_filters('widget_title',$instance['title']);
$show_info = isset( $instance['textarea'] ) ? $instance['textarea'] :'';
echo $args['before_widget'];
if(!empty($title))
{
echo $args['before_title'];
echo '<i class="fa fa-align-left"></i>'.$title;
echo $args['after_title'];
}
echo '<p>'.$instance['textarea'].'</p>';
}
public function update($new_instance, $old_instance)
{
$instance =$old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['textarea'] = esc_textarea($new_instance['textarea']);
return $instance;
}
//backend
public function form($instance)
{
$instance = wp_parse_args(array($intsance),array('title'=>'Title','textarea'=>'default'));
if(isset($instance['title']))
{
$title = strip_tags($instance['title']);
}
else
{
$title = 'Title';
}
$titleId = $this->get_field_id( 'title' );
$titleName = $this->get_field_name( 'title' );
$text = $instance['textarea'];
$contentId = $this->get_field_id( 'textarea' );
$contentName = $this->get_field_name( 'textarea' );
?>
<p>
<label for="<?php echo $titleId; ?>"><?php echo __('Title','sidewidget_domain');?></label>
<input class="widefat" id="<?php echo $titleId;?>" name="<?php echo $titleName;?>" value="<?php echo $title;?>"/>
</p>
<p>
<label for="<?php echo $contentId?>"><?php echo __('Content','sidewidget_domain');?></label>
<textarea class="widefat" id="<?php echo $contentId;?>" name="<?php echo $contentName;?>"><?php echo $text;?></textarea>
</p>
<h1><?php echo $instance['textarea'];?></h1>
<?php
}
}
我感觉这与基本小部件 ID 有关,但我不确定。
我弄明白了,问题出在这一行 $instance = wp_parse_args(array($intsance),array('title'=>'Title','textarea'=>'default'));
if(isset($instance['title']));
,我删除了它,它起作用了。