AJAXによってテンプレートパーツ内で呼び出されている場合、カスタマイザプレビューペインでリフレッシュ後にget_theme_modを機能させることは可能ですか?
私はスクロール(無限スクロール)で投稿をロードするテーマを持っていて、カスタマイザプレビューで更新されたテーマのmodを出力しないことを除いてすべてがうまくいきます。保存ボタンを押したときに新しいテーマのmodが出力されるだけです。
更新後に更新する方法についてのアイデアもありますか。
私のコントロール設定:
'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();
}
// ...
}
content.php:
echo get_theme_mod( 'show_caption', 'top' );
Ajax request before customize_save:
プレビューのAjaxリクエストに保留中のcustomized
変更が挿入されないWordPress 4.8.2にはバグがあります。これは4.9-alphaで #42162 で修正されています。しかし、その間に、要求されたurl
を以下のようなロジックで修正するための回避策をとることができます。
// 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;
}