我的wordpress自定义小部件搞乱了整个网站,一个小部件工作,添加更多小部件和破坏任何东西

时间:2014-06-30 21:39:45

标签: wordpress widget

我非常喜欢使用大量插件和主题的wordpress,我只是学习如何编写我自己的自定义小部件。

当我将它包含在我的主题功能中时,我的小部件工作正常。它在后端显示,也在前端显示,就像另一个小部件一样。

我遇到的唯一问题是,当我添加/创建另一个小部件时,小部件(所有小部件)开始行动起来很糟糕。

  • 当我将小部件添加到小部件区域时,它会显示选项(表单),但随后选项突然消失。

  • 当我尝试刷新管理区域上的页面(widget.php)时,该小部件上的选项显示正常,我可以修改该小部件上的值并像普通小部件一样保存它。

    < / LI>

此行为会影响我的管理区域中的其他功能,例如添加图片缩略图很奇怪(我可以添加缩略图,但图片不会显示在编辑页面的缩略图部分。

还有其他功能,例如当我点击保存时添加新帖子显示在空白页面上时,添加类别,页面,菜单或任何说新增内容的条件也相同。即使在保存我的主题选项时,它也会在我点击保存后将其指向空白页。

这是小部件代码。

<?php

class chalax_try_widget extends WP_Widget {

    /**
     * Register widget with WordPress.
     */
    function __construct() {
        parent::__construct(
            'chalax_try_widget', // Base ID
            __('Chalax try List', 'text_domain'), // Name
            array( 'description' => __( 'Widget untuk menampilkan daftar artikel/berita tertentu', 'text_domain' ), ) // Args
        );
    }

    /**
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args     Widget arguments.
     * @param array $instance Saved values from database.
     */
    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        echo $args['before_title'].$instance['title1'].$args['after_title'];
        echo "string";
        echo $args['after_widget'];
    }

    /**
     * Back-end widget form.
     *
     * @see WP_Widget::form()
     *
     * @param array $instance Previously saved values from database.
     */
    public function form( $instance ) {
        if (isset($instance['title1'])) {
            # code...
            $title1=$instance['title1'];
        }else{
            $title1="jajal";
        }
        ?>
            <input id="<?php echo $this->get_field_id( 'title1' ); ?>" name="<?php echo $this->get_field_name( 'title1' ); ?>" value="<?php echo $title1 ;?>">
        <?php
    }

    /**
     * Sanitize widget form values as they are saved.
     *
     * @see WP_Widget::update()
     *
     * @param array $new_instance Values just sent to be saved.
     * @param array $old_instance Previously saved values from database.
     *
     * @return array Updated safe values to be saved.
     */
    public function update( $new_instance, $old_instance ) {
        $instance  = array();
        $instance['title1'] = ( ! empty( $new_instance['title1'] ) ) ? strip_tags( $new_instance['title1'] ) : '';
        return $instance;
    }

} // class Foo_Widget

?>

小部件正常工作, 但是当我尝试添加另一个客户端小部件时,请这样说..

<?php

class chalax_try_widget extends WP_Widget {

    /**
     * Register widget with WordPress.
     */
    function __construct() {
        parent::__construct(
            'chalax_try_widget', // Base ID
            __('Chalax try List', 'text_domain'), // Name
            array( 'description' => __( 'Widget untuk menampilkan daftar artikel/berita tertentu', 'text_domain' ), ) // Args
        );
    }

    /**
     * Front-end display of widget.
     *
     * @see WP_Widget::widget()
     *
     * @param array $args     Widget arguments.
     * @param array $instance Saved values from database.
     */
    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        echo $args['before_title'].$instance['title1'].$args['after_title'];
        echo "string";
        echo $args['after_widget'];
    }

    /**
     * Back-end widget form.
     *
     * @see WP_Widget::form()
     *
     * @param array $instance Previously saved values from database.
     */
    public function form( $instance ) {
        if (isset($instance['title1'])) {
            # code...
            $title1=$instance['title1'];
        }else{
            $title1="jajal";
        }
        ?>
            <input id="<?php echo $this->get_field_id( 'title1' ); ?>" name="<?php echo $this->get_field_name( 'title1' ); ?>" value="<?php echo $title1 ;?>">
        <?php
    }

    /**
     * Sanitize widget form values as they are saved.
     *
     * @see WP_Widget::update()
     *
     * @param array $new_instance Values just sent to be saved.
     * @param array $old_instance Previously saved values from database.
     *
     * @return array Updated safe values to be saved.
     */
    public function update( $new_instance, $old_instance ) {
        $instance  = array();
        $instance['title1'] = ( ! empty( $new_instance['title1'] ) ) ? strip_tags( $new_instance['title1'] ) : '';
        return $instance;
    }

} // class Foo_Widget

?>
然后问题出现了..

我按照教程甚至从codex复制这些函数..

1 个答案:

答案 0 :(得分:0)

如果你这样做,你应该得到一个PHP错误。基本上你要声明一个具有相同名称的类两次(与声明一个函数两次相同的效果)只需重命名第二个类。

此外,您缺少注册窗口小部件的代码,我认为它随着某些内容的变化而存在。如果没有,请将其添加到代码中。