I'm using the loop + jQuery below to load in the next set of pages, and it works on the first click, but when the next page is loaded in and I click on "newer posts" it reloads the whole page. Any ideas?
<div id="content">
<?php
$new_query = new WP_Query();
$new_query->query('post_type=post&showposts=1'.'&paged='.$paged);
?>
<?php while ($new_query->have_posts()) : $new_query->the_post(); ?>
<?php the_title(); ?>
<?php endwhile; ?>
<div id="pagination">
<?php next_posts_link('« Older Entries', $new_query->max_num_pages) ?>
<?php previous_posts_link('Newer Entries »') ?>
</div>
</div><!-- #content -->
<script>
$('#pagination a').on('click', function(event){
event.preventDefault();
var link = $(this).attr('href'); //Get the href attribute
$('#content').fadeOut(500, function(){ });//fade out the content area
$('#content').load(link + ' #content', function() { });
$('#content').fadeIn(500, function(){ });//fade in the content area
});
</script>
Ajax Pagination helps to create pagination links and load dynamic data without page refresh from the database. You can add pagination to the data list without page using Ajax and PHP. In this tutorial, we will show you how to integrate pagination on the web page using jQuery, Ajax, PHP, and MySQL.
In order to add pagination to a WordPress theme, we need to build a function which will output previous and next post links at the bottom of the page, then add that to our template page. This is similar to the “Older Entries” and “Newer Entries” links that we saw above.
You're using jQuery's load()
method to insert content, which is a shortcut for $.ajax
, which of course inserts the content dynamically.
Dynamic content requires delegation of the events to a non-dynamic parent, something jQuery makes easy with on()
jQuery(function($) {
$('#content').on('click', '#pagination a', function(e){
e.preventDefault();
var link = $(this).attr('href');
$('#content').fadeOut(500, function(){
$(this).load(link + ' #content', function() {
$(this).fadeIn(500);
});
});
});
});
I used adeneo's solution, with a couple of minor tweaks.
.disabled
class.display: none;
once the opacity animation is complete). Instead, I manually animate the opacity, which limits the amount of height fluctuation.Here's the updated code:
$('#content').on('click', '#pagination :not(.disabled) a', function(e){
e.preventDefault();
var link = $(this).attr('href');
$.post( link, function( data ) {
var content = $(data).filter('#content');
var pagination = $(data).filter('#pagination');
$('#pagination').html(pagination.html());
$('#content').animate(
{opacity: 0},
500,
function(){
$(this).html(content.html()).animate(
{opacity: 1},
500
);
}
);
});
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With