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-
n
Klasse 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?
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.
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.
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.
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.