jQuery Ajax 分页 WordPress 版

在新年前 Kayo 写了一篇文章介绍瀑布流布局及通用的网站 Ajax 分页方法,现在再介绍一下针对 WordPress 的 Ajax 分页。

 

Ajax 分页的原理就不在这里介绍了,有兴趣的童鞋可以参考 《瀑布流布局与 jQuery Ajax 分页》,下面开始介绍 Ajax 分页 WordPress 版。

 

一.加载 jQuery 库

既然是 jQuery 驱动的 Ajax ,加载 jQuery 库是必须的。

 

二.文章列表格式

在你的文章列表页面(首页 index.php、归档 archive.php )需要确保有以下类似的结构

<!-- 包含所有文章的容器 -->
<div id="content">
    <!-- 各文章的容器 -->
    <div class="post"></div>
    <div class="post"></div>
    <div class="post"></div>
    <div class="post"></div>
    <div class="post"></div>
</div>

 

三.加入默认导航

因为 Ajax 分页每次获取的是下一页的内容,因此只需调用 WordPress 的默认导航。在你的 index.php (或是其他文章列表页面)加入以下代码,生成默认的 WordPress 导航。

<div id="pagination"><?php next_posts_link(__('LOAD MORE')); ?></div>

 

四.Ajax 获取下一页

在你的主题 js 文件里加入以下代码

	// 使用 live() 使 js 对通过 Ajax 获得的新内容仍有效
        $("#pagination a").live("click", function(){
            $(this).addClass("loading").text("LOADING...");
            $.ajax({
		type: "POST",
                url: $(this).attr("href") + "#content",
                success: function(data){
                    result = $(data).find("#content .post");
                    nextHref = $(data).find("#pagination a").attr("href");
					// 渐显新内容
                    $("#content").append(result.fadeIn(300));
                    $("#pagination a").removeClass("loading").text("LOAD MORE");
                    if ( nextHref != undefined ) {
                        $("#pagination a").attr("href", nextHref);
                    } else {
					// 若没有链接,即为最后一页,则移除导航
                        $("#pagination").remove();
                    }
				}
            });
			return false;
        });

 

五.滚动触发翻页

如果想当鼠标滚动到接近页面底部时自动翻页,则可以把代码改成下面的样式

		// 给浏览器窗口绑定 scroll 事件
		$(window).bind("scroll",function(){
		// 判断窗口的滚动条是否接近页面底部
        if( $(document).scrollTop() + $(window).height() > $(document).height() - 10 ) {
            $(this).addClass('loading').text('LOADING...');
            $.ajax({
				type: "POST",
                url: $(this).attr("href") + "#content",
                success: function(data){
                    result = $(data).find("#content .post");
                    nextHref = $(data).find("#pagination a").attr("href");
					// 渐显新内容
                    $("#content").append(result.fadeIn(300));
                    $("#pagination a").removeClass("loading").text("LOAD MORE");
                    if ( nextHref != undefined ) {
                        $("#pagination a").attr("href", nextHref);
                    } else {
					// 若没有链接,即为最后一页,则移除导航
                        $("#pagination").remove();
                    }
				}
			});
		}
		});

 

六.添加导航 css

为导航添加一段 css 美化一下,另外还可以准备一张 gif 图来表示正在加载,下面是 Melody 的样式:

#pagination {padding: 20px 0 0 30px; }
#pagination .nextpostslink {width: 600px; color: #333; text-decoration: none; display: block; padding: 9px 0; text-align: center; font-size: 14px; }
#pagination .nextpostslink:hover {background-color: #cccccc; text-decoration: none; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; }
#pagination .loading {background: url("images/loading.gif") 240px 9px no-repeat; color: #555; }
#pagination .loading:hover {background-color: transparent; cursor: default; }

本文由 Kayo Lee 发表,本文链接:http://kayosite.com/jquery-ajax-turn-page-for-wordpress.html

评论列表

  • 评论者头像
    回复

    如果使用主循环调用日志标题列表,可以用这个 Ajax 分页方法吗?

  • 评论者头像
    回复

    博主非常感谢你的文章,加载时实现了!可以首页主题不能翻页(地址栏变了,链接也变了,内容没有变!)所以一直就是循环加载之前的内容!加载不到新文章!可能主题问题,不知道博主有解决方法吗?
    index.php内容如下:“


    ++++++++++++++++++++++++++
    其中new.p.php是,
    开始如下,

    ID; ?>
    。。。。此处是文章展示内容。。。。

  • 评论者头像
    回复

    hi,研究好久也没有实现,在火狐firebug下,总是,,显示红色post undefined ,状态 404,地址显示localhost/page/undefined。代码和您的一样,选择器也是,不知道有其他哪些可能会导致得不到分页页码呢?

    多谢啦!!!!

  • 评论者头像
    回复

    折腾了下,稍微改了些代码,可是又出现重复加载,比如第二页,同时加载了好几次。不知道如何破呢?

    PS:代码改动主要是添加了$this = $(“#pagination a”);,然后把$(this)换成了$this。就出现了重复加载的情况。

    • 评论者头像
      回复

      滚动触发翻页里面的代码的$(this)好像要改成对象$(“#pagination a”)才可以

    • 评论者头像
      回复

      最近也在折腾这个,遇到和你一样的问题,请问你解决了吗

  • 评论者头像
    回复

    测试了一下,点击Load More后却不会加载,页面还是被翻页了,是什么情况?我的JQ版本哦1.9.0mini

  • 评论者头像
    回复

    这个方法只使用固定连接是默认情况。。。
    如果换了固定链接写法,就无法加载了。

  • 评论者头像
    回复

    博主,请教下:
    四.Ajax 获取下一页
    这个测试可以;
    五.滚动触发翻页
    这个测试效果不行啊,还是同四的效果;

    想要实现加载出来的第二页内容紧接着默认显示出来的在同一个页面,怎么弄呢?

1 2

回复

你正在以游客身份访问网站,请输入你的昵称和 E-mail
:wink: :roll: :oops: :mrgreen: :idea: :cry: :?: :-| :-o :-P :-? :) :( 8-O