WordPress不断地将我的小部件移动到其他小部件区域

时间:2019-12-12 作者:Kristián Filo

我目前正在开发一个WooCommerce商店,它基于Astra,具有许多自定义编码。我已经注意到两到三次我的小部件突然丢失了。事实上,他们只是被转移到其他小部件部分。

更具体地说,我有4列页脚和4个小部件,我在博客侧栏中有1个小部件,在WooCommerce侧栏中有4个小部件。

当他们被移动时,他们总是在相同的小部件区域结束。所有侧边栏小部件(包括WC小部件)都位于默认的博客侧边栏中,四个页脚小部件中有两个被移动到底部栏区域。

我不使用任何插件对小部件做任何事情,我在代码中对小部件所做的就是:

1)允许在HTML/文本小部件中使用短代码。

add_filter( \'widget_text\', \'do_shortcode\' );
2.)注册我的自定义小部件(常规方式,使用一些不相关的标记)。

function hstngr_register_widget() {
    register_widget( \'brands_widget\' );
}

add_action( \'widgets_init\', \'hstngr_register_widget\' );
class brands_widget extends WP_Widget {
    function __construct() {
        parent::__construct(
            \'brands_widget\',
            __(\'Brands widget\', \' brands_widget_domain\'),
            array( \'description\' => __( \'Display existing brands\', \'brands_widget_domain\' ), )
        );
    }
    public function widget( $args, $instance ) {
        if ( isset( $instance[ \'title\' ] ) ) {
            $title = apply_filters(\'widget_title\', $instance[\'title\']);
        }
        echo $args[\'before_widget\'];
        if ( ! empty( $title ) )
            echo $args[\'before_title\'] . $title . $args[\'after_title\'];

        // Output
        $brands = get_terms( array(
            \'taxonomy\' => \'vyrobca\',
            \'hide_empty\' => 0
        ));

        echo \'<ul class="product-categories sidebar-brands">\';
        foreach($brands as $brand) {
            echo \'<li class="cat-item">\';
            echo \'<a href="\' . get_term_link($brand->term_id) . \'" title="\' . $brand->name . \'">\';
            echo \'<img src="\' . get_field(\'icon\', \'vyrobca_\' . $brand->term_id) . \'" alt="\' . $brand->name . \'">\';
            echo \'</a>\';
            echo \'</li>\';
        }
        echo \'</ul>\';

        echo $args[\'after_widget\'];
    }
    public function form( $instance ) {
        if ( isset( $instance[ \'title\' ] ) )
            $title = $instance[ \'title\' ];
        else
            $title = __( \'Brands widget\', \'brands_widget_domain\' );
        ?>
        <p>
            <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\' ); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>
        <?php
    }
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';
        return $instance;
    }
}
小部件随机移动,我看不到任何模式。我在管理仪表板上修改代码,安装新插件,一切正常。然后,随机地,小部件就消失了。

1 个回复
SO网友:MistaPrime

如果这些小部件是插件,那么如果其中一个发生冲突,则可能会导致该问题。测试的一种方法是停用除一个插件以外的所有插件,并查看是否发生这种情况。然后激活另一个插件并再次测试,直到您找到导致问题的插件。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'