Deaktivieren Sie Abschnitte / Panels, wenn der Customizer das Laden beendet hat

Ich würde gerne wissen, wie ich Abschnitte / Panels deaktivieren kann, wenn der Customizer das Laden beendet.

An dieser Stelle versuchte ich $(window).on('load', function() { wp.customize.section(name).deactivate(); }) aber es funktioniert nicht immer und die Abschnitte erscheinen wieder wenn die Vorschau aktualisiert wird.

Wenn das Deaktivieren von Panels / Sektionen dauerhaft möglich ist, würde ich gerne die Lösung kennen.

Vielen Dank!

Solutions Collecting From Web of "Deaktivieren Sie Abschnitte / Panels, wenn der Customizer das Laden beendet hat"

Das Warten auf das load Fensters funktioniert nicht zuverlässig, da nach dem load der Vorschau alle Änderungen an der Aktivierung eines Abschnitts überschrieben werden. Selbst wenn Sie den Aufruf nach dem Laden des Vorschau-Iframes aufrufen können, wird der Abschnitt bei der nächsten Aktualisierung aufgrund einer Einstellungsänderung oder Navigation auf der Site wieder aktiviert. Die ready von der Vorschau zum Bereich enthält den aktiven Status für die von PHP registrierten Panels, Abschnitte und Steuerelemente. Die aktiven Zustände werden erhalten, indem der active_callback auf jedem active_callback . Um sicherzustellen, dass der Abschnitt deaktiviert ist, sollten Sie daher active_callback überschreiben, active_callback zu erzwingen, dass es false . Beachten Sie, dass der active_callback für jedes Konstrukt auch beim Laden des Customizers aufgerufen wird, damit er überschrieben werden kann, wenn der Customizer ebenfalls zuerst geladen wird. active_callback wird verhindert, dass der Abschnitt vorübergehend angezeigt und dann ausgeblendet wird.

Es gibt einige Möglichkeiten, wie Sie den Abschnitt deaktivieren können. Nehmen wir an, es ist der colors Sie interessiert sind. Der erste Weg besteht darin, den customize_section_active Filter zu verwenden:

 /** * 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 ); 

Eine zweite Möglichkeit besteht darin, den active_callback für den Abschnitt selbst zu überschreiben. Dies setzt voraus, dass der Abschnitt bei customize_register mit Priorität 10 registriert wird:

 /** * 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 ); 

Eine weitere Möglichkeit besteht darin, den Abschnitt vollständig zu entfernen. Dies ist ein Ansatz, den Sie im Abschnitt Zurücksetzen des Customizer auf eine leere Slate lesen können:

 /** * 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 ); 

Und schließlich gibt es noch eine JavaScript-Lösung, die in einer JS-Datei unter customize_controls_enqueue_scripts mit customize-controls als Abhängigkeit in eine Warteschlange gestellt wird:

 wp.customize.section( 'colors', function( section ) { section.active.set( false ); section.active.validate = function() { return false; // Prevent preview from updating state. }; } ); 

Ich nehme an, dass die spezielle Methode, die Sie zum Deaktivieren des Abschnitts gewählt haben, von Ihrem Anwendungsfall abhängt und ob Sie den Abschnitt während der Anpassungssitzung des Benutzers bedingt wieder aktivieren möchten.