我的wordpress自定义小部件搞乱了整个网站,一个小部件工作,添加更多的小部件,毁掉一切

我的wordpress自定义小部件搞乱了整个网站,一个小部件工作,添加更多的小部件,毁掉一切,wordpress,widget,Wordpress,Widget,我真的很喜欢wordpress,有很多插件和主题,我只是学习如何编写自己的自定义小部件 当我将小部件包含在主题函数中时,它可以正常工作。它显示在后端和前端,就像另一个小部件一样 我遇到的唯一问题是,当我添加/创建另一个小部件时,小部件(所有小部件)开始运行。 当我将小部件添加到小部件区域时,它会显示选项(表单),但随后选项突然消失 当我尝试在管理区域刷新页面(widget.php)时,该小部件上的选项看起来很正常,我可以修改该小部件上的值,并像普通小部件一样保存它 此行为会影响“我的管理”区

我真的很喜欢wordpress,有很多插件和主题,我只是学习如何编写自己的自定义小部件

当我将小部件包含在主题函数中时,它可以正常工作。它显示在后端和前端,就像另一个小部件一样

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

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

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

此行为会影响“我的管理”区域中的其他功能,例如添加图像缩略图是wierd(我可以添加缩略图图像,但图像不会显示在编辑器页面的缩略图部分)

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

这是小部件代码

<?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

?>

小部件正在工作, 但是当我尝试添加另一个custome小部件时,请这样说

<?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复制此函数。

如果执行上述操作,您应该会收到一个php错误。基本上,您两次使用相同的名称声明一个类(与两次声明一个函数的效果相同),只需重命名第二个类即可


此外,您还缺少注册小部件的代码,我假设它在那里,因为有些东西正在发生变化。如果没有,请添加它,它也会出现在codex中。

感谢您的回复。我认为这是因为类的名称。