맞춤 설정 도구 설정으로 선택적 새로 고침을 구현하려면 어떻게해야하나요?


10

드롭 다운 페이지 컨트롤을 사용하여 사용자 정의 프로그램에서 사용자가 선택한 페이지를 기반으로 콘텐츠를 표시하는 테마로 페이지 템플릿에 섹션이 있습니다. 지금은 표준 기본 새로 고침 전송을 사용하고 있지만 전체 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
) );

답변:


10

선택적으로 새로 고친 템플릿 코드를 출력하는 함수 만들기

( <div class="cta-wrap">이 특정 마크 업을 쉽게 타겟팅 할 수 있도록 HTML을 래핑했습니다 .)

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...
}

유용한 링크


당신이 너무 많이 알고있는 것처럼 보인다;) 당신이 답을 생각할 수 있다면 다음 레벨은 일부 새로 고침을 트리거하는 일부 속성 변경과 다른 설정은 완전히 새로 고침하는 것입니다 (이 경우 전체 JS 옵션을 설정하는 데 필요합니다) . 공식적인 질문을해야합니까? ;))
Mark Kaplun

@MarkKaplun,이 답변이 얼마나 오래 걸 렸는지 알면 전혀 그렇게 보이지 않을 것입니다 :-) 테스트 설정에는 위의 선택적 새로 고침과 함께 전체 페이지 새로 고침 옵션이 혼합되어 있습니다. 상자에서 바로 작동하는 것 같습니다. 마음에 들지 않으면 특정 세부 정보가 포함 된 새로운 질문을 선호하고 시간이 허락되면 기꺼이 해결해 드리겠습니다.
Dave Romsey

1
fallback_refresh주석 과 관련하여 : "문서에 .cta-wrap 선택기가 포함되지 않은 경우 지속적인 새로 고침을 방지합니다". 무한 재 장전 버그는 4.7-RC1에서 수정되어야합니다.
Weston Ruter

1
@ dave-romsey JS의 요점은 무엇입니까 customize-preview.js? 요소의 내용을 페이지 ID로 설정하고있는 것 같습니다. 선택적 새로 고침이 대신이 모든 것을 처리하지 않아야 하므로이 JS 파일이 전혀 필요하지 않습니까?
Weston Ruter

@WestonRuter 4.7-RC1의 무한 새로 고침 수정에 대한 메모에 감사드립니다. 당신도 customize-preview.js불필요한 것에 대해 (자연스럽게 :-p) 맞습니다 . 그래서 나는 그것을 대답에서 제거했습니다.
Dave Romsey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.