Nhận số 'trang' với cuộn vô hạn


7

Tôi đã thêm hỗ trợ cuộn vô hạn của plugin Jetpack vào chủ đề của riêng mình bằng hướng dẫn này :

add_theme_support( 'infinite-scroll', array(
    'container'  => 'content',
    'footer' => false,
    'render' => 'vividflow_infscroll_render',
    'wrapper' => 'post_summaries',
    'posts_per_page' => 12,
    'type' => 'scroll'
) );

Bây giờ tôi cần một cái gì đó giống như một bộ đếm tăng dần mỗi khi bài viết bổ sung được tải.

Tôi biết rằng các bài đăng mới được đặt trong một infinite-view-nlớp và tôi có một hàm JavaScript mà tôi muốn gọi trên lớp được tải mới đó:

function setupPostSummaries(counter) {
    jQuery('.infinite-view-'+counter).doSomething();
}

Vì vậy, tôi đoán rằng tôi cần một biến PHP trong hàm kết xuất cuộn vô hạn hoặc vòng lặp tăng dần mỗi khi bài viết bổ sung được tải. Sau đó tôi có thể làm ở cuối Vòng lặp:

<script type="text/javascript">setupPostSummaries(<?php the_counter(); ?>);</script>

Là một biến như vậy đã có? Hoặc có một cách khác để đạt được mục tiêu của tôi?


Bất kỳ tiến bộ về điều này?
kaiser

@kaiser oh, xin lỗi tôi đã không trả lời. Câu trả lời của bạn hoạt động tốt, nhưng tôi chờ đợi với việc chấp nhận và khen thưởng để những người khác cũng có thể trả lời.

Hoàn toàn ok cho tôi. Btw: Tôi đã chỉnh sửa một số thứ nhỏ, như numberpostsbị phản đối. Đã thêm một sự thay thế.
kaiser

Tôi đã thấy - thậm chí không nhận thấy nó. Nhưng hẹn gặp lại sau 20 giờ!

Câu trả lời:


6

Lấy các giá trị

Thông thường bạn chỉ cần truy cập vào $wp_queryđối tượng hoặc, trong trường hợp bạn đã thực hiện một truy vấn tùy chỉnh như $my_query = new WP_Query();, $my_queryđối tượng. Từ đó, bạn có thể nhận được $wp_query->numberposts(hoặc tốt hơn, là không phản đối $wp_query->found_posts:) cho toàn bộ số lượng bài đăng và $wp_query->posts_per_pagecho số lượng bài đăng trên mỗi trang.

Bên trong một plugin

Chỉ cần viết một plugin nhỏ để thực hiện công việc này cho bạn:

<?php
/* Plugin Name: Infinite Scroll Counter Script */
add_action( 'wp_enqueue_scripts', 'wpse88834_add_script' );
function wpse88834_add_script()
{
    wp_enqueue_script(
        'wpse_counter',
        plugin_dir_url( __FILE__ ).'js/counter.js',
        array( 'jquery' ), // the infinte scroll script should also be added as dependency
        filemtime( plugin_dir_path( __FILE__ ).'js/counter.js' ),
        true
    );
    wp_localize_script(
        'wpse_counter',
        'wpse_counter_obj',
        array(
            'numberposts'    => $GLOBALS['wp_query']->numberposts,
            'found_posts'    => $GLOBALS['wp_query']->found_posts,
            'posts_per_page' => $GLOBALS['wp_query']->posts_per_page,
        )
    );
}

Khi bạn đang ở trong tập lệnh của mình, bạn có thể dễ dàng truy cập dữ liệu của mình ở đó

/* Inside ~/js/counter.js */
jQuery( document ).ready( function($) {
    /* wpse_counter_obj.numberposts */
    wpse_counter_obj.found_posts
    wpse_counter_obj.posts_per_page
    // Current
    var post_count_curr = 0;
    post_count_curr  += wpse_counter_obj.found_posts;
    console.log( post_count_curr  );
} );

Bây giờ bạn chỉ cần thêm một trình nghe sự kiện vào cuộn vô hạn và tăng bộ đếm.


2

Tôi đã gặp phải vấn đề tương tự và đã sử dụng cách sau để lấy số trang:

$curPage = (get_query_var('paged') ? get_query_var('paged') : 1) + 1;

Tôi không thể nói lý do tại sao nó lại bị tắt khi thực hiện WP_Query tùy chỉnh nhưng vẫn ổn nếu tôi không - đây có thể là một cái gì đó cụ thể cho chủ đề tôi đang tùy chỉnh. Nhưng giá trị này không tăng cho mỗi cuộc gọi.


2
Vui lòng giải thích cách này sẽ giúp với nội dung được tải viea Javascript. Bạn đang đề xuất mã này ở đâu?
s_ha_dum

Nội dung vẫn được hiển thị phía máy chủ, javascript chỉ đang thực hiện yêu cầu.
ViNull

1
Đây vẫn là một câu trả lời không đầy đủ.
s_ha_dum

1

Một giải pháp cho vấn đề chỉ ảnh hưởng đến nhóm bài đăng cuối cùng, nhưng không liên quan đến câu hỏi lấy 'số trang', có tại đây:

Tất cả các bài viết mới được tải trong một div với lớp post_summaries. Bạn có thể chỉnh sửa chức năng JavaScript của mình để nó chỉ ảnh hưởng đến phần tử cuối cùng với mã này:

function setupPostSummaries() {
    jQuery('.post_summaries').last().doSomething();
}

Tuy nhiên, như đã nói, điều này không giải quyết được vấn đề nhưng không phải là câu hỏi.

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.