如何从主题中筛选Customize_Load_Components?

时间:2016-04-29 作者:Scott Fennell

我写了一个WordPress主题,它经常使用定制器。我想注销widgets面板(我有我的理由)。目前,我正在这样做:

/**
 * Our class for altering the WP theme customizer.
 */
class LXB_AF_Customize {

    public function __construct() {

        [...]

        add_action( \'customize_register\', array( $this, \'remove_items\' ), 980 );

        [...]

    }

    [...]

    // We\'re gonna output widgets elsewhere, so we don\'t need the core widgets panel.
    function remove_items( $wp_customize ) {

        [...] 

        @$wp_customize -> remove_panel( \'widgets\' );

    }

}
通过以下方式在全局范围内实例化:

/**
 * Setup the Theme Customizer settings and controls.
 */
function lxb_af_customizer_init() {
    new LXB_AF_Customize();
}
add_action( \'init\' , \'lxb_af_customizer_init\' );
这会触发core的doing\\u it\\u错误错误,如下所示:https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-customize-manager.php#L1212

这条信息建议我使用customize_loaded_components:

https://developer.wordpress.org/reference/hooks/customize_loaded_components/

然而,正如文档页面所述,customize_loaded_components 从主题调用时似乎不起作用。我只能通过插件才能让它工作。在我的情况下,我不想为了使用我的主题而要求任何特定的插件处于活动状态。

有什么建议吗?

1 个回复
SO网友:Luis Sanz

自WordPress 4.5以来,关于remove_panel 核心组件(目前\'nav_menus\'\'widgets\').

警告说明:

手动删除WP\\U Customize\\u Manager::remove\\u面板将导致PHP警告。改用customize\\u loaded\\u components过滤器。

显然,添加它是因为WordPress 4.0到4.5版本中出现了一些php和javascript错误,插件和/或主题给出了相互矛盾的命令,比如一个插件和/或主题试图修改小部件面板,而另一个插件之前已经删除了它。

然而,警告建议对主题无效,因为customize_loaded_components 在他们面前开火。因此,从主题调用的这个钩子不会在处理队列的正确时刻出现,也不会产生任何效果。

对于\'nav_menus\' 有一种变通方法似乎不适用于小部件:

$wp_customize->get_panel( \'nav_menus\' )->active_callback = \'__return_false\';

可能有一种方法可以在不打印警告的情况下有效地删除小部件面板。但对于一般的公共用途来说,从主题中删除任何这些核心组件似乎都违背了最佳实践。

相关推荐