当定制器完成加载时停用部分/面板

时间:2017-02-20 作者:superwinner

我想知道如何在自定义程序完成加载后停用节/面板。

在这一点上,我试着$(window).on(\'load\', function() { wp.customize.section(name).deactivate(); }) 但它实际上并不是一直工作,如果预览刷新,这些部分就会重新出现。

如果可以永久停用面板/部分,我想知道解决方案。

非常感谢。

1 个回复
最合适的回答,由SO网友:Weston Ruter 整理而成

正在等待窗口load 无法可靠地工作,因为一旦预览加载,它将覆盖对节激活的任何更改。所以即使你能打电话deactivate 首次加载预览iframe后,下次由于设置更改或在站点周围导航而刷新时,该节将重新激活。这个ready 从预览到窗格的消息包括PHP注册的面板、节和控件的活动状态。通过调用active_callback 在每个上。因此,为了确保该节处于停用状态,应覆盖active_callback 迫使它成为false. 请注意active_callback for each construction在加载自定义程序时也被调用,因此这将允许在自定义程序首次加载时覆盖它,从而防止部分暂时出现然后隐藏。

有几种方法可以强制停用该节。假设是colors 您感兴趣的部分。第一种方法是使用customize_section_active 过滤器:

/**
 * Ensure the colors section remains deactivated.
 *
 * @param bool                 $active  Whether the Customizer section is active.
 * @param WP_Customize_Section $section WP_Customize_Section instance.
 * @return bool Active.
 */
function wpse257129_filter_customize_section_active( $active, $section ) {
    if ( \'colors\' === $section->id ) {
        $active = false;
    }
    return $active;
}
add_filter( \'customize_section_active\', \'wpse257129_filter_customize_section_active\', 10, 2 );
第二种方法是覆盖active_callback 在节本身上。这假设该节注册于customize_register 优先级10:

/**
 * Ensure the colors section remains deactivated.
 *
 * @param WP_Customize_Manager $wp_customize Manager instance.
 */
function wpse257129_override_colors_section_active_callback( WP_Customize_Manager $wp_customize ) {
    $colors_section = $wp_customize->get_section( \'colors\' );
    if ( $colors_section ) {
        $colors_section->active_callback = \'__return_false\';
    }
}
add_action( \'customize_register\', \'wpse257129_override_colors_section_active_callback\', 11 );
另一种方法是完全删除该部分,您可以在Resetting the Customizer to a Blank Slate:

/**
 * Remove the colors section.
 *
 * @param WP_Customize_Manager $wp_customize Manager instance.
 */
function wpse257129_remove_colors_section( WP_Customize_Manager $wp_customize ) {
    $wp_customize->remove_section( \'colors\' );
}
add_action( \'customize_register\', \'wpse257129_remove_colors_section\', 11 );
最后还有一个JavaScript解决方案,在一个JS文件中加入以下内容customize_controls_enqueue_scripts 具有customize-controls 作为其依赖项:

wp.customize.section( \'colors\', function( section ) {
    section.active.set( false );
    section.active.validate = function() {
        return false; // Prevent preview from updating state.
    };
} );
我认为您选择的停用部分的具体方法取决于您的用例,以及您是否希望在用户自定义会话期间有条件地重新激活该部分。

相关推荐