利用AJAX实现WordPress中的文章列表及评论的分页功能


Posted in Javascript onMay 17, 2016

文章列表页分页
一.加载 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; }

评论分页
一.准备
加载 jQuery 库,这个不解释了。

二.开启 WordPress 评论分页
打开 WordPress 后台 - 设置 - 讨论,在“其他评论设置”中勾选分页显示评论,设置一下评论数目,这里的评论数目仅计算主评论,回复评论不作计算。这里我填了比较大的数字(15),因为评论分页分得太细会使用户不便于阅读之前的评论。

在后台开启评论分页后,在 comments.php 中需要添加分页导航的地方加入以下代码(如主题中有类似代码则无须再添加,另外代码中的 nav 标签为 HTML5 标签,若主题没有使用 HTML5 则有 div 代替即可。)

<nav id="comments-navi">
  <?php paginate_comments_links('prev_text=?&next_text=?');?>
</nav>

三.评论分页的 SEO
从 SEO 的角度看,评论分页会造成重复内容(分页的内容正文都一样,并且 keywords 和 description 也相同),这样对于评论很多的博客很容易因为重复内容太多而降权,因此需要在 SEO 方面作出一些处理,最为方便有效的方法是使用 meta 标签。在你的 header.php 原有的 meta 标签下加入以下代码,这样分页的页面便会禁止被搜索引擎收录,防止内容重复。

<?php if( is_single() || is_page() ) {
  if( function_exists('get_query_var') ) {
    $cpage = intval(get_query_var('cpage'));
    $commentPage = intval(get_query_var('comment-page'));
  }
  if( !empty($cpage) || !empty($commentPage) ) {
    echo '<meta name="robots" content="noindex, nofollow" />';
    echo "\n";
  }
}
?>

 
四.Ajax 评论
根据上文所述,现在主题中已经有评论分页了,要做到 Ajax 的评论分页,只需 JavaScript 的配合,不过在这之前首先要在评论列表前加入一个元素,用于在显示新一页评论列表时表示列表正在加载。假设主题模板 comments.php 的评论模块结构如下:

<div class="comments">
  <h3 id="comments-list-title">Comments</h3>
  <!-- 显示正在加载新评论 -->
  <div id="loading-comments"><span>Loading...</span></div>
  <!-- 评论列表 -->
  <ol class="comment_list">    
    <li>...</li>
    <li>...</li>
    <li>...</li>
  </ol>
  <!-- 评论分页导航 -->
  <nav id="comments-navi">
    <a class="prev page-numbers" href="#">1</a>
    ...
  </nav>
</div>

在你的 js 文件中加入以下 js 代码实现评论分页

// 评论分页
$body=(window.opera)?(document.compatMode=="CSS1Compat"?$('html'):$('body')):$('html,body');
// 点击分页导航链接时触发分页
$('#comments-navi a').live('click', function(e){
  e.preventDefault();
  $.ajax({
    type: "GET",
    url: $(this).attr('href'),
    beforeSend: function(){
      $('#comments-navi').remove();
      $('.comment_list').remove();
      $('#loading-comments').slideDown();
      $body.animate({scrollTop: $('#comments-list-title').offset().top - 65}, 800 );
    },
    dataType: "html",
    success: function(out){
      result = $(out).find('.comment_list');
      nextlink = $(out).find('#comments-navi');
      $('#loading-comments').slideUp('fast');
      $('#loading-comments').after(result.fadeIn(500));
      $('.comment_list').after(nextlink);
    }
  });
});

加载条的 css (仅供参考)

#loading-comments {display: none; width: 100%; height: 45px; background: #a0d536; text-align: center; color: #fff; font-size: 22px; line-height: 45px; }
Javascript 相关文章推荐
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
实例分析javascript中的call()和apply()方法
Nov 28 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
js实现横向拖拽导航条功能
Feb 17 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
Bootstrap教程JS插件弹出框学习笔记分享
May 17 #Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 #Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
May 17 #Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 #Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 #Javascript
jquery获取img的src值的简单实例
May 17 #Javascript
jQuery Mobile框架中的表单组件基础使用教程
May 17 #Javascript
You might like
PHP Token(令牌)设计
2008/03/15 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
python实现端口转发器的方法
2015/03/13 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
基于python 字符编码的理解
2017/09/02 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
python破解zip加密文件的方法
2018/05/31 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
铭万公司.net面试题笔试题
2014/07/20 面试题
设计模式的基本要素是什么
2014/04/21 面试题
银行领导班子四风对照检查材料
2014/09/27 职场文书
2014年环卫工作总结
2014/11/22 职场文书
水电工程师岗位职责
2015/02/13 职场文书
世界遗产的导游词
2015/02/13 职场文书
祝寿主持词
2015/07/02 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle