我一直在尝试在Wordpress中创建一个自定义窗口小部件,以保存其独立于窗口小部件其他实例的设置。该网站有多个侧边栏,每个小部件的使用方式不同。我跟着this tutorial并将我的尝试与那里的下载进行了比较(除了我需要的更改),虽然那个有效,但我没有。
当我修补它时,有两件事情发生。 a)在点击保存后,它不执行任何操作,只返回空白而不保存。或者b)我收到以下错误:
注意:未定义的索引:exampleWidget-2 in /var/www/vhosts/example.co.uk/httpdocs/wp-admin/includes/ajax-actions.php 在1636号线上
不同之处在于我是否在id-base变量中使用了captial。我对Wordpress这方面很陌生,这可能会对你的反应方式产生影响。
/* Add our function to the widgets_init hook. */
add_action('widgets_init', 'load_tile_widget');
/* Function that registers our widget. */
function load_tile_widget() {
register_widget( 'tile_widget' );
}
class tile_widget extends WP_Widget {
function tile_widget() {
/* Widget settings. */
$widget_ops = array( 'classname' => 'example', 'description' => __('An example widget that displays a person\'s name and sex.', 'example') );
/* Widget control settings. */
$control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'exampleWidget' );
/* Create the widget. */
$this->WP_Widget( 'exampleWidget', __('Example Widget', 'example'), $widget_ops, $control_ops );
} // end function tile_widget()
function widget($args, $instance){
extract( $args );
/* User-selected settings. */
$tileTitle = $instance['tileTitle'];
$tileText = $instance['tileText'];
$tileUrl = $instance['tileUrl'];
$tileColor = $instance['tileColor'];
/* Before widget (defined by themes). */
echo $before_widget;
echo '<a class="tile tile-med" href="'.stripslashes($tileUrl).'" style="background: '.stripslashes($tileColor).'">';
echo '<div class="tile-content">';
echo '<h2>'.stripslashes($tileTitle).'</h2>';
echo '<p>'.stripslashes(nl2br($tileText)).'</p>';
echo '</div>'; //close tile-content
echo '</a>'; //close url
echo $after_widget;
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['tileTitle'] = strip_tags($new_instance['tileTitle']);
$instance['tileText'] = strip_tags($new_instance['tileText']);
$instance['tileUrl'] = strip_tags($new_instance['tileUrl']);
$instance['tileColor'] = strip_tags($new_instance['tileColor']);
return $instance;
}
function form($instance) {
/* Set up some default widget settings. */
$defaults = array( 'tileTitle' => 'Example Title', 'tileText' => 'Example Text', 'tileUrl' => 'http://example.org', 'tileColor' => '#aaccee' );
$instance = wp_parse_args( (array) $instance, $defaults ); ?>
<p>Tile Title: (Medium)<br />
<input type="text" class="widefat" name="<?php echo $this->get_field_id( 'tileTitle' ); ?>" value="<?php echo $instance['tileTitle']; ?>" /></p>
<p>Tile Text:<br />
<textarea class="widefat" rows="5" id="<?php echo $this->get_field_id( 'tileText' ); ?>" name="<?php echo $this->get_field_id( 'tileText' ); ?>"><?php echo $instance['tileText']; ?></textarea></p>
<p>Tile Link URL:<br />
<input type="text" class="widefat" name="<?php echo $this->get_field_id( 'tileUrl' ); ?>" id="<?php echo $this->get_field_id( 'tileUrl' ); ?>" value="<?php echo $instance['tileUrl']; ?>" /></p>
<p>Tile Colour:<br />
<input type="text" class="color-field widefat" name="<?php echo $this->get_field_id( 'tileColor' ); ?>" id="<?php echo $this->get_field_id( 'tileColor' ); ?>" value="<?php echo $instance['tileColor']; ?>" data-default-color="#723e52" /></p>
<?php
}
}
?>
感谢。
答案 0 :(得分:0)
找出问题所在。
name="<?php echo $this->get_field_id( 'tileText' ); ?>">
应该是:
name="<?php echo $this->get_field_name( 'tileText' ); ?>">
简单复制粘贴错误。惭愧我大约6个小时后才意识到......
感谢。