为什么Customize_Register操作被执行了两次?

时间:2015-09-03 作者:progmastery

add_action( \'after_setup_theme\', \'wdwt_customizer_register\' );
function wdwt_customizer_register(){
  add_action( \'customize_register\', \'wdwt_customizer_add_panels\' );
}
function wdwt_customizer_add_panels($wp_customize ){
  /*this function is called twice*/
}
这同样适用于“215”主题。twentyfifteen_customize_register 挂接在同一标记上的函数被调用两次。

“customizer\\u register”操作似乎执行了两次,一次在customizer admin中,一次在preview部分。WordPress版本为4.3。

这是bug还是功能?

1 个回复
SO网友:s_ferdie

我认为定制程序会为创建一个xhr请求来加载站点预览(请参见网络>xhr选项卡下的devtools)。在我的例子中,我想检查是否通过$\\u GET[\'foo\']变量设置了某个变量。我的函数必须调用一次而不是两次,否则它将覆盖我以前的状态。

我的解决方案是检查$\\u POST[\'wp\\u customize\']是否为空。如果为空,则表示我的函数不会被预览请求调用两次。

我使用以下挂钩/动作customize_loaded_components

示例:

function wpdocs_remove_widgets_panel( $components ) {
    if( empty( $_POST[\'wp_customize\'] ) ) {
       // Do stuff here that will not be loaded twice by the previewer
    }
    return $components;
}

add_filter( \'customize_loaded_components\', \'wpdocs_remove_widgets_panel\' );

相关推荐