Wie man get_theme_mod mit AJAX in der Customizer-Vorschau arbeiten lässt

Ist es möglich, dass get_theme_mod nach der Aktualisierung im Customizer-Vorschaufenster funktioniert, wenn es von AJAX in einem Vorlageteil aufgerufen wird?

Ich habe ein Theme, das die Beiträge auf Scroll lädt (infinite scroll) und alles funktioniert, außer dass die aktualisierten Theme-Mods nicht in der Customizer-Vorschau ausgegeben werden. Es gibt nur die neuen Themen-Mods aus, wenn ich den Speichern-Knopf drücke.

Irgendeine Idee, wie man es nach einer Aktualisierung auch aktualisiert?

Meine Steuerungseinstellungen:

'id' => 'show_caption', 'type' => 'select', 'section' => 'caption', 'transport' => 'refresh', 'default' => 'top', 'choices' => array( 'top' => __( 'Top', 'my-domain' ), 'bottom' => __( 'Bottom', 'my-domain' ), ), 

InfiniteScroll.php:

class InfiniteScroll { private $query; public function __construct( WP_Query $query ) { $this->query = $query; } public function register() { add_action( 'wp_ajax_my_infinite_scroll', array( $this, 'handleAjax' ) ); add_action( 'wp_ajax_nopriv_my_infinite_scroll', array( $this, 'handleAjax' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueueScripts' ) ); } public function getPosts() { ob_start(); $this->query->query( $this->getData() ); if ( $this->query->have_posts() ) { while ( $this->query->have_posts() ) { $this->query->the_post(); get_template_part( 'template-parts/post/content' ); } } wp_reset_postdata(); return ob_get_clean(); } public function handleAjax() { if ( ! check_ajax_referer( 'infinite-scroll-ajax', 'nonce' ) ) { wp_die(); } wp_send_json_success( $this->getPosts() ); wp_die(); } // ... }
class InfiniteScroll { private $query; public function __construct( WP_Query $query ) { $this->query = $query; } public function register() { add_action( 'wp_ajax_my_infinite_scroll', array( $this, 'handleAjax' ) ); add_action( 'wp_ajax_nopriv_my_infinite_scroll', array( $this, 'handleAjax' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueueScripts' ) ); } public function getPosts() { ob_start(); $this->query->query( $this->getData() ); if ( $this->query->have_posts() ) { while ( $this->query->have_posts() ) { $this->query->the_post(); get_template_part( 'template-parts/post/content' ); } } wp_reset_postdata(); return ob_get_clean(); } public function handleAjax() { if ( ! check_ajax_referer( 'infinite-scroll-ajax', 'nonce' ) ) { wp_die(); } wp_send_json_success( $this->getPosts() ); wp_die(); } // ... } 

Inhalt.php:

echo get_theme_mod( 'show_caption', 'top' );
echo get_theme_mod( 'show_caption', 'top' ); 

Ajax request before customize_save:

Vor

Solutions Collecting From Web of "Wie man get_theme_mod mit AJAX in der Customizer-Vorschau arbeiten lässt"

Es gibt einen Fehler in WordPress 4.8.2, der dazu führt, dass ausstehende customized Änderungen nicht in Ajax-Anfragen in der Vorschau eingefügt werden. Dies wurde in 4.9-Alpha über # 42162 behoben . In der Zwischenzeit können Sie jedoch eine Problemumgehung durchführen, um die angeforderte url mit Logik wie folgt zu ändern:

 // Workaround defect introduced in WordPress 4.8.2 where preview nonce is not included in request. if ( 'undefined' !== typeof _wpCustomizeSettings ) { urlParser = document.createElement( 'a' ); urlParser.href = url; urlParser.search += '&customize_preview_nonce=' + _wpCustomizeSettings.nonce.preview; url = urlParser.href; }