Dynamische Seitenleistenbereiche funktionieren nicht im Design-Customizer

Ich versuche, einen Seitenleistenbereich pro Seite in einer WordPress-Site zu erstellen. Wenn zum Beispiel eine WordPress-Installation 2 Seiten hat: “Home” und “Blog”, dann gibt es zwei Sidebar-Bereiche, “Home sidebar area” und “Blog sidebar area”. Ich dachte, ich könnte einfach die Seiten durchblättern und die Seitenleistenbereiche dynamisch erstellen, so:

// functions.php add_action( 'widgets_init', 'xxx_widgets_init' ); function xxx_widgets_init() { $args = array( 'post_type' => 'page' ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); register_sidebar( array( 'name' => 'Widget name', 'id' => 'widget-id-' . $post->ID, 'description' => __( 'Widget desc', 'xxx' ), 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '', 'after_title' => '', ) ); } //Restore original Post Data wp_reset_postdata(); } }

Das funktioniert, ich kann einen Seitenleistenbereich pro Seite sehen. Wenn ich eine dritte Seite erstelle, wird der dritte Seitenleistenbereich sofort wie erwartet ohne Probleme erstellt.

Ich gehe zu Erscheinungsbilder> Widgets und füge ein paar Widgets zu meinen dynamischen Seitenleistenbereichen hinzu, und sie werden erfolgreich gespeichert.

Das Problem ist, dass es ein unerwartetes Verhalten gibt, wenn Sie genau dasselbe tun, aber im Design-Customizer:

Wenn ich zu Customizer> Widgets gehe> [Ich kann meine Widget-Bereiche hier sehen OK]> … Wenn ich versuche, ein Widget hinzuzufügen, wird scheinbar eine unendliche automatische Speicherung ausgetriggers, und es ist nicht möglich, hinzuzufügen oder zu bearbeiten Bewegen Sie Widgets herum . Können Sie feststellen, ob etwas an dieser Methode zum Erstellen dynamischer Widget-Bereiche nicht stimmt?

Solutions Collecting From Web of "Dynamische Seitenleistenbereiche funktionieren nicht im Design-Customizer"

Das Erstellen neuer Abfrageobjekte ist in dieser Situation keine gute Idee. Versuchen Sie einfach, die Seiten zu erhalten und diese Objekte zu verwenden, um die Widgetbereiche zu bedienen:

 add_action( 'widgets_init', 'my_243057_widgets_init' ); function my_243057_widgets_init() { /** * Get only published page objects * @link: https://codex.wordpress.org/Function_Reference/get_pages */ $pages = get_pages(); foreach ( $pages as $page ) { register_sidebar( array( 'name' => 'Widget name', 'id' => 'widget-id-' . $page->ID, 'description' => __( 'Widget for page: ' . $page->post_title ), 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '', 'after_title' => '', ) ); } }