Làm cách nào để triển khai làm mới có chọn lọc với cài đặt tùy biến?


10

Tôi có một phần trong mẫu trang trong chủ đề tôi đang tạo hiển thị nội dung dựa trên trang mà người dùng chọn trong tùy biến bằng điều khiển trang thả xuống. Ngay bây giờ, nó chỉ sử dụng vận chuyển làm mới mặc định tiêu chuẩn, nhưng vì đó là loại tải lại toàn bộ iframe, tôi đã tự hỏi liệu có thể sử dụng tính năng làm mới chọn lọc mới không. Nhưng tôi không chắc làm thế nào để thực hiện nó. Bất cứ ai cũng biết nếu điều này là có thể và nếu vậy làm thế nào để làm điều đó?

Đây là mã trong mẫu trang của tôi hiển thị nội dung:

<?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>';
}
} ?>

Đây là mã cho cài đặt trong tùy biến:

$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
) );

Câu trả lời:


10

Tạo một hàm để xuất mã mẫu được chọn làm mới

(Tôi đã bọc HTML bên trong <div class="cta-wrap">để dễ dàng nhắm mục tiêu vào khối đánh dấu cụ thể này.)

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>';
    }
}

Cập nhật mẫu của bạn bằng một cuộc gọi đến chức năng mới được tạo ở trên:

wpse247234_cta_block();

Thiết lập Trình tùy biến

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' );

Tạo kiểu cho món đồ khi nó được làm mới

Trong khi một phần được làm mới, phần tử bị ảnh hưởng sẽ có lớp customize-partial-refreshingđược thêm vào nó. Bạn có thể tạo kiểu như vậy:

.cta-wrap.customize-partial-refreshing {
    // styles...
}

Liên kết hữu ích


có vẻ như bạn biết quá nhiều;) vì vậy nếu bạn nghĩ rằng bạn có thể có câu trả lời thì cấp độ tiếp theo là có một cài đặt hỗn hợp với một số thay đổi thuộc tính kích hoạt làm mới một phần trong khi những người khác làm mới hoàn toàn (trong trường hợp này là cần thiết để đặt tùy chọn JS toàn cầu) . Tôi có nên làm một câu hỏi chính thức? ;))
Đánh dấu Kaplun

@MarkKaplun, nếu bạn biết câu trả lời này mất bao lâu thì tôi dường như không như vậy :-) Trong thiết lập thử nghiệm của mình, tôi có một hỗn hợp các tùy chọn làm mới toàn trang ngoài việc làm mới có chọn lọc ở trên. Có vẻ để làm việc tốt ngay ra khỏi hộp. Nếu bạn không phiền tôi sẽ thích một câu hỏi mới với các chi tiết cụ thể của bạn và khi thời gian cho phép, tôi rất vui lòng giải quyết nó.
Dave Romsey

1
Về fallback_refreshnhận xét: Free ngăn chặn làm mới liên tục khi tài liệu không chứa .cta-quấn bộ chọn. Lỗi được tải lại vô hạn nên được sửa trong 4.7-RC1.
Weston Ruter

1
@ dave-romsey Điểm của JS là customize-preview.jsgì? Có vẻ như nó đang đặt nội dung của thành phần vào ID trang? Không nên làm mới có chọn lọc để xử lý tất cả những điều này cho bạn và vì vậy không cần tệp JS này?
Weston Ruter

@WestonRuter cảm ơn bạn đã lưu ý về bản sửa lỗi cho việc làm mới vô hạn trong 4.7-RC1. Bạn cũng đúng (tự nhiên :-p) về việc customize-preview.jskhông cần thiết quá, vì vậy tôi đã xóa nó khỏi câu trả lời.
Dave Romsey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.