多用途小部件在Wordpress中不保存/抛出错误

时间:2014-02-12 17:22:10

标签: php wordpress widget

我一直在尝试在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
    }
}

?>

感谢。

1 个答案:

答案 0 :(得分:0)

找出问题所在。

name="<?php echo $this->get_field_id( 'tileText' ); ?>">

应该是:

name="<?php echo $this->get_field_name( 'tileText' ); ?>">

简单复制粘贴错误。惭愧我大约6个小时后才意识到......

感谢。