問題描述

我使用 this tutorial 將 Jetpack 外掛的無限滾動支援新增到我自己的主題中:

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

現在我需要像計數器這樣的東西,每次載入額外的帖子都會增加。

我知道新的帖子被放置在 infinite-view- n 類中,我有一個 JavaScript 函式,我想要呼叫這個新載入的類:

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

所以我想我需要一個 PHP 變數在無限滾動渲染功能或迴圈中增加每次額外的帖子被載入。然後我可以在迴圈結束時做:

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

這樣的變數已經有了嗎?還是有其他方式來實現我的目標?

最佳解決方案

抓住價值觀

通常,您只需訪問 $wp_query 物件,或者如果您做了像 $my_query = new WP_Query(); 的自定義查詢,則 $my_query 物件。從那裡你可以得到 $wp_query->numberposts(或更好的,作為 non-deprecated:$wp_query->found_posts) 的全部數量的帖子和 $wp_query->posts_per_page 每頁的帖子數量。

在外掛裡面

只要寫一個小外掛為你做這個工作:

<?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,
        )
    );
}

當您在指令碼中時,您可以輕鬆訪問您的資料

/* 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  );
} );

現在你只需要新增一個事件監聽器到無限滾動並遞增計數器。

次佳解決方案

我遇到同樣的問題,並使用以下內容獲取頁碼:

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

我不能說為什麼它做一個定製的 WP_Query,但如果我不這樣做 – 它可能是一個特定於我自定義的主題的東西。但是,這個值對於每個呼叫都是遞增的。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。