Holen Sie sich die Seitenzahl mit unendlicher Schriftrolle

7

Mit diesem Tutorial habe ich meinem eigenen Thema die unendliche Bildlaufunterstützung des Jetpack-Plugins hinzugefügt :

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 jedes Mal erhöht wird, wenn zusätzliche Beiträge geladen werden.

Ich weiß, dass die neuen Beiträge in einer infinite-view-nKlasse platziert 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 der Schleife, die jedes Mal erhöht wird, wenn zusätzliche Beiträge geladen werden. Dann kann ich am Ende von The Loop Folgendes tun:

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

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


quelle
Irgendwelche Fortschritte in diesem Fall?
Kaiser
@kaiser oh, sorry ich habe nicht geantwortet. Ihre Antwort funktioniert gut, aber ich warte mit Akzeptieren und Belohnen, damit auch andere antworten können.
Für mich völlig in Ordnung. Übrigens: Ich habe einige Kleinigkeiten bearbeitet, da sie numberpostsveraltet sind. Ersatz hinzugefügt.
Kaiser
Ich habe gesehen - habe es nicht einmal bemerkt. Aber wir sehen uns in 20 Stunden!

Antworten:

6

Werte erfassen

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

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 nur noch einen Ereignis-Listener zur unendlichen Schriftrolle hinzufügen und den Zähler erhöhen.

Kaiser
quelle
2

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

$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 ist möglicherweise etwas Spezifisches für das Thema, das ich anpasse. Dieser Wert erhöht sich jedoch bei jedem Aufruf.

ViNull
quelle
2
Bitte erläutern Sie, wie dies bei Inhalten hilft, die über Javascript geladen wurden. Wo schlagen Sie vor, diesen Code zu platzieren?
s_ha_dum
Der Inhalt wird immer noch serverseitig gerendert, Javascript stellt nur die Anfrage.
ViNull
1
Dies ist immer noch eine unvollständige Antwort.
s_ha_dum
1

Eine Lösung für das Problem, nur die letzten Beiträge zu beeinflussen, nicht aber die Frage, ob eine Seitenzahl erhalten werden soll, finden Sie hier:

Alle neuen Beiträge werden in ein div mit Klasse geladen post_summaries. 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, löst dies zwar das Problem, aber nicht die Frage.


quelle