利用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 相关文章推荐
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
jquery+css实现的红色线条横向二级菜单效果
Aug 22 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
jQuery深拷贝Json对象简单示例
Jul 06 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
小程序实现五星点评效果
Nov 03 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
Nov 12 Javascript
Vue自定义铃声提示音组件的实现
Jan 22 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
历史专业大学生职业生涯规划书
2014/03/13 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
详解JavaScript中Arguments对象用途
2021/08/30 Javascript