无限滚动pathParse为反向WordPress评论
我正在使用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选项 – 但没有文档说明如何使用它。 我甚至不确定这是否会有所帮助。
我(和很多其他人)会非常感谢你能给予的任何帮助。
思想ID芯片在这里有一个更简单的解决方案。 我没有尝试改变插件,而是发现更容易(经过几天和几天的尝试)来反转注释数组。 只需将其添加到您的functions.php(源自此处 )
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设置>讨论保留为默认值即可。
该插件从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--;
我似乎想出了一个(不完全优雅)解决这个问题的方法。
非常感谢@ 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. eg /page/3/ opts.state.currPage++;
并改为
// decrement the URL bit. eg /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);