删除小部件时请注意

时间:2014-11-17 10:37:25

标签: php wordpress widget

我正在尝试自定义itheme的Exchange电子商务插件。我想添加目录功能 - 删除添加到购物车和立即购买按钮。因为作为交换,这些按钮是使用他们的超级小工具创建的,我认为删除这些按钮的最简单方法是删除超级小工具。所以我创建了一个函数:

if(!function_exists('exchange_catalogue')){
    function exchange_catalogue(){
        unregister_widget( 'IT_Exchange_Super_Widget' );
    }
}

add_filter( 'widgets_init', 'exchange_catalogue');

但我明白了:

Notice: Undefined index: IT_Exchange_Super_Widget in /wp-includes/widgets.php on line 1356

我检查了是否有这样注册的小部件:

$widgets = array_keys( $GLOBALS['wp_widget_factory']->widgets );
print '<pre>$widgets = ' . esc_html( var_export( $widgets, TRUE ) ) . '</pre>';

刚刚将其添加到上面的函数中,并且小部件在那里(已列出)

$widgets = array (
...
 26 => 'IT_Exchange_Super_Widget',
)

所以,如果它存在,并且我的函数将其删除,为什么我会收到此通知?

哦,我知道有一个选项,但只有你购买他们的扩展〜$ 200,这将增加一个... ...

编辑:

我试过这个:

    if (isset( $GLOBALS['wp_widget_factory']->widgets['IT_Exchange_Super_Widget'] )) {
        unset( $GLOBALS['wp_widget_factory']->widgets['IT_Exchange_Super_Widget'] );
    }

并且

    if (isset( $GLOBALS['wp_widget_factory']->widgets['IT_Exchange_Super_Widget'] )) {
        unregister_widget( 'IT_Exchange_Super_Widget' );
    }

但仍然得到通知。

1 个答案:

答案 0 :(得分:0)

找到答案! :d

我只是把

if(!function_exists('exchange_catalogue')){
    function exchange_catalogue(){
       if (isset( $GLOBALS['wp_widget_factory'])) {
           $GLOBALS['wp_widget_factory']->widgets['IT_Exchange_Super_Widget'] = null;
       }
    }
}

这种方式设置了小部件,但它什么都没有。所以它没有显示:D简单修复如果你想要交换商店的目录能力:)