我写了一个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
从主题调用时似乎不起作用。我只能通过插件才能让它工作。在我的情况下,我不想为了使用我的主题而要求任何特定的插件处于活动状态。
有什么建议吗?
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\';
可能有一种方法可以在不打印警告的情况下有效地删除小部件面板。但对于一般的公共用途来说,从主题中删除任何这些核心组件似乎都违背了最佳实践。