Customizer – Laden von Einstellungen / Controls / Sektionen / Panels basierend auf einer ID / Seiten-ID

Ich entwickle ein Thema mit vielen Themenmods, Sektionen und Panels. Mein Problem ist, dass der Customizer alle auf einmal lädt und es kann eine Weile dauern, bis es geladen ist. Außerdem möchte ich wirklich nur die Einstellungen laden, die für die Seite benötigt werden, die ich gerade bearbeite.

Ich habe nach einigen Filtern im WP_Customize_Manager aber ich kann keine finden, die die sections , panels , settings , WP_Customize_Manager oder die Methoden, in denen sie verwendet werden, verändern würden.

An dieser Stelle wp-admin/customize.php?url=pageurl&apageid=700 ich die Seiten-ID, indem ich sie zur Customizer-URL hinzufüge, etwa wie wp-admin/customize.php?url=pageurl&apageid=700

Basierend auf dieser Seiten-ID möchte ich die benötigten Bereiche und Einstellungen registrieren und den Rest entfernen.

Nur ein Beispiel, hat dies mit Panels, Kontrollen, Abschnitten auch getan:

 function test_reg( $wp_customize ) { $currentID = isset( $_GET['apageid'] ) ? absint( $_GET['apageid'] ) : ''; // tmpl_ids() returns an ids array of all the pages that use a certain page template if( in_array( $currentID, tmpl_ids() ) { $custom_settings = array( 'custom_setting_' . $currentID, ); foreach( $custom_settings as $val ) { ... register the setting here. } foreach( $wp_customize->settings() as $setting ) { if( ! in_array( $setting->id, $custom_settings ) ) { $wp_customize->remove_setting( $setting->id ); } } } } add_action( 'customize_register', 'test_reg', 999 ); 

Dies wird die Einstellungen entfernen, aber es funktioniert nicht für die Vorschau customize_preview_settings , die alle von ihnen ausgeben wird.

Wie auch immer, irgendeine Idee, wie man das richtig macht? Vielen Dank!

Solutions Collecting From Web of "Customizer – Laden von Einstellungen / Controls / Sektionen / Panels basierend auf einer ID / Seiten-ID"

Die stabilste Methode hierfür ist die JavaScript-basierte Instanziierung der Abschnitte, Steuerelemente und Einstellungen als Reaktion auf die Vorschau der URL. Da Sie in der Vorschau durch die Site navigieren können, wird sichergestellt, dass die post- / seitenspezifischen Abschnitte und Steuerelemente so erstellt werden, wie Sie sie benötigen, wenn Sie auf der Site navigieren. Dies hängt davon ab, ob die Vorschau mit dem übergeordneten Fenster des Steuerfensters kommuniziert und die URL in der Vorschau angezeigt wird (und die abgefragte Post-ID). Beide sind im Plug-in “Posts anpassen” implementiert . Weitere Details zur Nachrichtenübergabe aus der Vorschau finden Sie in # 36582 .

Da Sie wahrscheinlich nach einer statischen PHP-Lösung suchen, ist es am einfachsten, sicherzustellen, dass sowohl das Steuerfenster als auch das Vorschaufenster dieselbe Post-ID sehen können. Verwenden Sie keine benutzerdefinierte Abfrage var wie apageid , sondern verwenden Der tatsächliche url Parameter, der verwendet wird, um dem Customizer mitzuteilen, welche URL in die Vorschau geladen werden soll. Wenn Sie sich zum Beispiel auf einer Seite oder einem einzelnen Beitrag im Frontend befinden und auf Anpassen klicken, wird der url Parameter der Permalink sein. Mit dieser Hand können Sie dann aus dem url Parameter lesen und es durch url_to_postid() , um die Post-ID zu erhalten.

Es ist ein anderes Stück benötigt hier und das ist dynamische Einstellungen zu implementieren. Da eine Einstellung dynamisch in PHP erstellt wird, abhängig davon, ob Sie sich auf einer bestimmten Seite befinden oder nicht, wird nach dem Aktualisieren oder Veröffentlichen des Änderungssatzes eine Fehlermeldung angezeigt, dass die Einstellung nicht erkannt wird. Durch das Implementieren dynamischer Einstellungen können Sie PHP mitteilen, wie Sie Einstellungen basierend auf Mustern in ihren IDs erkennen und sie rechtzeitig registrieren können.

Hier ist ein voll funktionsfähiges Beispiel-Plugin, das einen Abschnitt für den anfänglich geladenen Post hinzufügt und ein Kontrollkästchen-Steuerelement hinzufügt, um anzugeben, ob der Post-Inhalt in Großbuchstaben geschrieben werden soll oder nicht: https://gist.github.com/westonruter/9e9510c7f57dfbd37eb8c0162b971aa2

Sie können auch prüfen, ob Sie den Customizer auf einen leeren Slate zurücksetzen möchten.