In WordPress è relativamente semplice implementare l'infinite scroll.
Creiamo l'action AJAX in functions.php
:
function my_get_posts() {
$offset = $_GET['offset'];
$html = '';
if( isset( $offset ) && filter_var( intval( $offset ), FILTER_VALIDATE_INT ) ) {
$args = array(
'posts_per_page' => 3,
'post_status' => 'publish',
'offset' => $offset
);
$loop = new WP_Query( $args );
while( $loop->have_posts() ) {
$loop->the_post();
// Creiamo la stringa HTML con il contenuto dei post
}
wp_reset_postdata();
}
echo $html;
exit();
}
add_action( 'wp_ajax_my_posts', 'my_get_posts' );
add_action( 'wp_ajax_nopriv_my_posts', 'my_get_posts' );
Quindi il codice jQuery:
(function( $ ) {
var getPosts = function() {
if( $( "#posts-wrap" ).length ) {
var offset = 3; // 3 post alla volta
var $content = $( "#posts-wrap" );
var loading = false;
var ajaxUrl = "http://" + location.host + "/wp-admin/admin-ajax.php";
$content.data( "offset", offset );
$( window ).scroll(function() {
if( ( ( $( this ).scrollTop() + $( this ).height() ) + 250 ) >= $( document ).height() ) {
if( loading === false ) {
loading = true;
var data = {
action: "my_posts",
offset: $content.data( "offset" )
};
$.when( $.get( ajaxUrl, data ) ).done(function( posts ) {
$content.append( posts ).data( "offset", parseInt( $content.data( "offset" ), 10 ) + 3 );
loading = false;
});
}
}
});
}
}
$(function() {
getPosts();
});
})( jQuery );