web-dev-qa-db-ja.com

無限スクロールで 'ページ'番号を取得

このチュートリアル を使用して、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>

そのような変数はすでにありますか?それとも私の目標を達成するための他の方法はありますか?

7
Keelan

値をつかむ

通常は単に$wp_queryオブジェクトにアクセスするか、$my_query = new WP_Query();のようなカスタムクエリを実行した場合は$my_queryオブジェクトにアクセスします。そこからあなたは全投稿数のための$wp_query->numberposts(より良い、非推奨:$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  );
} );

今度は無限リスナにイベントリスナを追加してカウンタをインクリメントするだけです。

7
kaiser

私はこれと同じ問題に遭遇し、そしてページ番号を得るために以下を使用しました:

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

カスタムWP_Queryを実行するときになぜ1つずつ失敗するのかはわかりませんが、そうしないと罰金になります。これは、カスタマイズしているテーマに固有のものかもしれません。しかし、この値は呼び出しごとに増加します。

2
ViNull

問題への解決策 最後の投稿への影響のみで、 への解決策 「ページ番号」の取得に関する問題は、次のとおりです。

すべての新しい投稿はクラスpost_summariesのdivにロードされます。 JavaScript関数を編集して、このコードの最後の要素にのみ影響を与えるようにすることができます。

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

しかし、前述のように、これで問題は解決されますが、問題は解決されません。

1
Keelan