问题:我无法重载现有小部件的update()方法。小部件方法和表单方法工作正常,但我无法更新表单方法中定义的新选项的值。
我是如何做到这一点的:
我想使用自定义主题中的默认WP小部件,我需要给它们我公司的外观和感觉。
我继承了WP\\u Widget\\u Pages类并重载了form()(我需要添加两个选项)、update(来管理新选项)和Widget()方法。
在我的功能中。php它如下所示:
function load_my_widgets() {
register_widget(\'WP_MY_Widget_Pages\');
}
/* Add our function to the widgets_init hook. */
add_action( \'widgets_init\', \'load_my_widgets\' );
class WP_MY_Widget_Pages extends WP_Widget_Pages {
function widget( $args, $instance ) {
parent::widget($args, $instance)
}
function update( $new_instance, $old_instance ) {
$first_instance = parent::update($new_instance, $old_instance);
$first_instance[\'block_type\'] = \'my_block_type\';
$first_instance[\'block_color\'] = \'my_block_color\';
return $first_instance;
}
function form( $instance ) {
//Defaults
$instance = wp_parse_args( (array) $instance, array( \'sortby\' => \'post_title\', \'title\' => \'\', \'exclude\' => \'\', \'block_type\' => \'\', \'block_color\' => \'\' ));
$block_type = esc_attr( $instance[\'block_type\'] );
$block_color = esc_attr( $instance[\'block_color\'] );
parent::form($instance);
?>
<p>
<label for="<?php echo $this->get_field_id(\'block_type\'); ?>"><?php _e( \'Block type:\' ); ?></label>
<select name="<?php echo $this->get_field_name(\'block_type\'); ?>" id="<?php echo $this->get_field_id(\'block_type\'); ?>" class="widefat">
<?php foreach (get_all_block_type() as $block_label => $block_type): ?>
<option <?php selected( $block_type , $instance[\'block_type\'] ); ?> value="<?php echo $block_type; ?>"><?php _e($block_label); ?></option>
<?php endforeach; ?>
</select>
<?php echo \'Block type : \'.$instance[\'block_type\']; ?>
</p>
<p>
<label for="<?php echo $this->get_field_id(\'block_color\'); ?>"><?php _e( \'Block color:\' ); ?></label>
<select name="<?php echo $this->get_field_name(\'block_color\'); ?>"
id="<?php echo $this->get_field_id(\'block_color\'); ?>"
class="widefat" style="background-color: <?php echo $block_color_value; ?>" >
<?php foreach (get_all_block_color() as $block_color_label => $block_color_class): ?>
<option <?php selected( $block_color_label , $instance[\'block_color\'] ); ?> value="<?php echo $block_color_label;?>" style="background-color: <?php echo $block_color_class;?>" > </option>
<?php endforeach; ?>
</select>
<?php echo \'block color : \'.$instance[\'block_color\']; ?>
</p>
<?php
}
}
为了便于阅读,我已经清理了widget方法。我没有在update()中进行验证,我已经设置了一个文本值使其简短。
当我转到仪表板/小部件页面,然后显示我的页面小部件时,我可以为这两个新属性设置值。保存时,新选项值的输出不显示任何内容(数据库中也没有任何内容:从wp\\u options中选择option\\u value,其中option\\u id=\'106’;)
如果有任何提示,我将不胜感激。
提前谢谢。