无限滚动pathParse为反向WordPress评论

时间:2012-07-09 14:56:34

标签: jquery wordpress infinite-scroll

我正在使用jQuery Infinite Scroll插件 - https://github.com/paulirish/infinite-scroll/ 显示我的分页WordPress评论。

当查看从旧到新的注释时,插件工作正常(我认为这是默认选项),但如果WordPress中的讨论选项设置为以下内容:

Break comments into pages with [XX] top level comments per page and the
[LAST] page displayed by default

Comments should be displayed with the [NEWER] comments at the top of each page

然后无限滚动不再有效。

调查问题,似乎是因为如果设置如上,那么WordPress将显示的第一个评论页面是最后一个,所以即是。

WordPress 1st comment page displayed = http://MYLINK/comment-page-5
WordPress 2nd comment page displayed = http://MYLINK/comment-page-4
WordPress 3rd comment page displayed = http://MYLINK/comment-page-3

但是,我认为 Infinite Scroll想要递增每个页面,所以在显示第一页(实际上是第5页)之后,Infinite Scroll会查找第6页,这是不存在的。

查看IS选项,有一个 pathParse 选项 - 但没有解释如何使用它的文档。我甚至不确定这是否会有所帮助。

我(以及其他很多人)会非常感谢您提供任何帮助。

3 个答案:

答案 0 :(得分:2)

思想ID芯片在这里提供了一个更简单的解决方案。 而不是试图改变插件,我发现更容易(经过几天和几天的尝试),反转注释数组。 只需将此添加到您的functions.php(源自here

if (!function_exists('iweb_reverse_comments')) {
function iweb_reverse_comments($comments) {
    return array_reverse($comments);
    }   
}
add_filter ('comments_array', 'iweb_reverse_comments');

这样,infinitescroll js可以保持原样。此外,您只需离开Wordpress设置>讨论默认。

答案 1 :(得分:0)

插件从div.navigation a:first选择器获取要加载的下一个URL。它的href属性作为路径传递到下一页的ajax请求。在控制台中尝试使用jQuery选择器,看看它出现了什么;然后,您可以更改插件以重写选择器,或者更改HTML以使选择器获得正确的匹配。

尝试2

解析问题不是因为编号;它正在寻找page=3,您的链接是page-3。假设无法更改,但您可以按照建议添加pathParse方法(在您在代码中注释掉类似方法的位置添加此方法):

 ,pathParse:function(path,nextPage){
   path = path.match(/page[-=]([0-9]*)/).slice(1);
   return path;
 }

然后让它正确地减少而不是增加我目前唯一可以看到的方法是改变第493行(在WP插件的开发版中)来阅读

opts.state.currPage--;

答案 2 :(得分:0)

我似乎想出了一个(不完全优雅)解决这个问题的方法。

非常感谢@ M1ke的帮助。

确定,

首先,您需要使用pathParse函数,因此您可以在其中定义无限滚动选项:

加入

.infinitescroll({
    state: {
      currPage: 4 // The number of the first comment page loaded, you can generate this number dynamically to save changing it manually
    },        

    pathParse: function(path,nextPage){
        path = ['comment-page-','#comments'];
        return path;
    }
});

然后你需要调整主插件文件(jquery.infinitescroll.js或.min版本),因为似乎没有任何其他方法可以做到这一点。所以,找到以下部分:

// increment the URL bit. e.g. /page/3/
opts.state.currPage++;

并改为

// decrement the URL bit. e.g. /page/3/
if (opts.state.currPage > 1) {
    opts.state.currPage--;
}
else if (opts.state.currPage == 1) {
    console.log("Last Page"); // Just needed for debugging              
    opts.state.currPage = 999999; // stop IS from loading Comment Page 0 by giving it a page number that won't exist and will return a '404' to provide 'end' function.
}

另外,请确保以下部分:

this._debug('pathParse manual');
return opts.pathParse(path, this.options.state.currPage+1);

更改为:

this._debug('pathParse manual');
return opts.pathParse(path, this.options.state.currPage);