web-dev-qa-db-de.com

Holen Sie sich "Seite" Nummer mit unendlichen Scroll

Mit diesem Tutorial fügte ich meinem eigenen Theme die unendliche Scroll-Unterstützung des Jetpack-Plugins hinzu:

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

Jetzt brauche ich so etwas wie einen Zähler, der sich jedes Mal erhöht, wenn zusätzliche Beiträge geladen werden.

Ich weiß, dass die neuen Beiträge in einer infinite-view-nKlasse abgelegt sind und ich habe eine JavaScript-Funktion, die ich für diese neu geladene Klasse aufrufen möchte:

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

Ich brauche also eine PHP -Variable in der Infinite-Scroll-Render-Funktion oder in der Schleife, die sich jedes Mal erhöht, wenn zusätzliche Posts geladen werden. Dann kann ich am Ende von The Loop machen:

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

Gibt es da schon so eine Variable? Oder gibt es einen anderen Weg, um mein Ziel zu erreichen?

7
Keelan

Werte erfassen

Normalerweise greifen Sie einfach auf das Objekt $wp_query zu oder, falls Sie eine benutzerdefinierte Abfrage wie $my_query = new WP_Query(); durchgeführt haben, auf das Objekt $my_query. Von dort können Sie den $wp_query->numberposts (oder besser, als nicht veraltet: $wp_query->found_posts) für die gesamte Anzahl der Beiträge und den $wp_query->posts_per_page für die Anzahl der Beiträge pro Seite abrufen.

In einem Plugin

Schreiben Sie einfach ein kleines Plugin, um diesen Job für Sie zu erledigen:

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

Wenn Sie sich dann in Ihrem Skript befinden, können Sie dort problemlos auf Ihre Daten zugreifen

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

Jetzt müssen Sie der unendlichen Schriftrolle nur noch einen Ereignis-Listener hinzufügen und den Zähler inkrementieren.

7
kaiser

Ich bin auf dasselbe Problem gestoßen und habe Folgendes verwendet, um die Seitenzahl zu ermitteln:

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

Ich kann nicht sagen, warum es bei einer benutzerdefinierten WP_Query um eins deaktiviert ist, aber es ist in Ordnung, wenn ich es nicht tue - dies kann etwas Spezifisches für das Thema sein, das ich anpasse. Dieser Wert wird jedoch bei jedem Aufruf erhöht.

2
ViNull

Eine Lösung für das Problem nur die letzte Gruppe von Beiträgen zu beeinflussen, nicht aber für die Frage eine Seitennummer zu erhalten, finden Sie hier:

Alle neuen Beiträge werden in ein div mit der Klasse post_summaries geladen. Sie können Ihre JavaScript-Funktion so bearbeiten, dass sie nur das letzte Element mit diesem Code betrifft:

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

Wie gesagt, dies löst das Problem, aber nicht die Frage.

1
Keelan