ドロップダウンページコントロールを使用してカスタマイザで選択したページに基づいてコンテンツを表示する、作成中のテーマのページテンプレートのセクションがあります。現時点では標準のデフォルトのリフレッシュ転送を使用しているだけですが、iframe全体をリロードするのはぎこちないので、新しい選択的リフレッシュ機能を使用することが可能かどうかと思いました。しかし、それを実装する方法がわかりません。これが可能であるかどうか、そして可能であればそれを行う方法を誰かが知っていますか?
コンテンツを表示する私のページテンプレートのコードは次のとおりです。
<?php if ((get_theme_mod( 'intro_page' )) != '') {
$intro_id = get_theme_mod( 'intro_page' );
$intro_header = get_the_title( $intro_id );
$intro_excerpt = get_the_excerpt( $intro_id );
$intro_link = get_the_permalink( $intro_id );
$intro_linktext = get_post_meta( $intro_id, 'emm_cta_text', true );
echo '<h1>' . esc_html($intro_header) . '</h1>' . '<p>' . esc_html($intro_excerpt) . '</p>';
if( ! get_post_meta( $intro_id, 'emm_cta_text', true ) ) {
echo '<p><a class="cta" href="' . esc_url($intro_link) . '">Learn More</a></p>';
}else{
echo '<p><a class="cta" href="' . esc_url($intro_link) . '">' . esc_html($intro_linktext) . '</a></p>';
}
} ?>
これがカスタマイザの設定のためのコードです:
$wp_customize->add_setting( 'intro_page' , array(
'sanitize_callback' => 'absint',
) );
$wp_customize->add_control( 'intro_page', array(
'label' => __( 'Page to use for intro section', 'veritas' ),
'section' => 'intro',
'settings' => 'intro_page',
'type' => 'dropdown-pages',
'priority' => 1
) );
(マークアップのこの特定のブロックを簡単にターゲットにできるように、HTMLを<div class="cta-wrap">
で囲みました。)
function wpse247234_cta_block() {
if ( ( get_theme_mod( 'intro_page' ) ) != '' ) {
$intro_id = get_theme_mod( 'intro_page' );
$intro_header = get_the_title( $intro_id );
$intro_excerpt = get_the_excerpt( $intro_id );
$intro_link = get_the_permalink( $intro_id );
$intro_linktext = get_post_meta( $intro_id, 'emm_cta_text', true );
echo '<div class="cta-wrap">';
echo '<h1>' . esc_html( $intro_header ) . '</h1>' . '<p>' . esc_html( $intro_excerpt ) . '</p>';
if ( ! get_post_meta( $intro_id, 'emm_cta_text', true ) ) {
echo '<p><a class="cta" href="' . esc_url( $intro_link ) . '">Learn More</a></p>';
} else {
echo '<p><a class="cta" href="' . esc_url( $intro_link ) . '">' . esc_html( $intro_linktext ) . '</a></p>';
}
echo '</div>';
}
}
上記で新しく作成した関数を呼び出してテンプレートを更新します。
wpse247234_cta_block();
function wpse247234_customize_register( $wp_customize ) {
$wp_customize->add_section( 'intro', array (
'title' => __( 'intro', 'text-domain' ),
'priority' => 999,
) );
$wp_customize->add_setting( 'intro_page' , array(
'sanitize_callback' => 'absint',
'transport' => 'postMessage'
) );
$wp_customize->add_control( 'intro_page', array(
'label' => __( 'Page to use for intro section', 'text-domain' ),
'section' => 'intro',
'settings' => 'intro_page',
'type' => 'dropdown-pages',
'priority' => 1
) );
$wp_customize->selective_refresh->add_partial( 'intro_page', array(
'selector' => '.cta-wrap',
'container_inclusive' => true,
'render_callback' => 'wpse247234_cta_block',
'fallback_refresh' => false, // Prevents refresh loop when document does not contain .cta-wrap selector. This should be fixed in WP 4.7.
) );
}
add_action( 'customize_register', 'wpse247234_customize_register' );
パーシャルが更新されている間、影響を受けた要素にはcustomize-partial-refreshing
クラスが追加されます。あなたはそのようにそれをスタイルすることができます:
.cta-wrap.customize-partial-refreshing {
// styles...
}