简单的Wordpress AJAX分页

时间:2013-04-13 01:36:13

标签: jquery ajax wordpress pagination

我正在使用下面的循环+ jQuery加载下一组页面,并且它在第一次单击时起作用,但是当下载页面加载并且我点击“更新的帖子”时它会重新加载整个页面。有什么想法吗?

<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('&laquo; Older Entries', $new_query->max_num_pages) ?>
    <?php previous_posts_link('Newer Entries &raquo;') ?>
    </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>

2 个答案:

答案 0 :(得分:22)

您正在使用jQuery的load()方法插入内容,这是$.ajax的快捷方式,当然会动态插入内容。

动态内容需要将事件委托给非动态父级,jQuery可以轻松使用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);
            });
        });
    });
});

答案 1 :(得分:3)

我使用了adeneo的解决方案,并进行了一些小调整。

  1. 我的分页是在我想要加载的容器之外,所以我对分页内容执行了单独的调用。根据评论,我更新了代码以进行单个Ajax调用,过滤返回的数据以检索和更新所需的元素。
  2. 我的分页包括所有链接,即使是当前页面也是如此。如果被点击的元素是活动页面,那么执行Ajax请求是没有意义的,所以我添加了逻辑来仅定位其父列表项元素没有.disabled类的分页链接。
  3. 每次加载新内容时页面都会跳转,因为它使用的是fadeOut / In(在不透明度动画完成后设置display: none;)。相反,我手动设置不透明度的动画,这会限制高度波动的大小。
  4. 这是更新后的代码:

    $('#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
                    );
                }
            );
        });
    });