web-dev-qa-db-ja.com

Get_theme_modを動作させる方法 AJAX カスタマイザプレビューで

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:

Before

1
michael

プレビューの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;
}
4
Weston Ruter