这是因为无论保存的值是什么,您总是将默认值输出到输入中:
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( \'title\' ) ); ?>" type="text" value="<?php echo esc_attr( $defaults[\'title\'] ); ?>" />
具体而言:
value="<?php echo esc_attr( $defaults[\'title\'] ); ?>"
$defaults[\'title\']
始终是空字符串。保存的标题位于内部
$instance[\'title\']
, 由于这条线:
extract( wp_parse_args( array( $instance, $defaults ) ) );
它也位于一个名为
$title
. 这不是很明显,这就是为什么使用
extract()
像这样的做法很糟糕。
我建议明确设置变量:
$title = isset( $instance[\'title\'] ) ? $instance[\'title\'] : $defaults[\'title\'];
在这种情况下,应按如下方式输出值:
value="<?php echo esc_attr( $title ); ?>"
或者把结果
wp_parse_args()
返回到
$instance
:
public function form( $instance ) {
$defaults = array(
\'title\' => \'\',
);
$instance = wp_parse_args( array( $instance, $defaults ) );
// ...etc.
}
在这种情况下,应按如下方式输出值:
value="<?php echo esc_attr( $instance[\'title\'] ); ?>"