在90%的情况下,即刷新相同的页面,函数wp_list_comments(),comments_form(),has_comments()和其他函数都没有产生预期的结果。
因此,我刷新同一个页面,这些函数返回不同的结果,例如0注释、5注释或21注释,而没有其他用户使用数据库,因为它是一个带有XAMPP的测试系统。值得注意的是,只有值0、5和21似乎会弹出注释的数字。
往下看调用堆栈,我可以注意到,有时$wpdb->has_ comments ()返回0,尽管post包含注释。
我怀疑这可能与我的版本4.5的wordpress缓存系统有关,我在他们的bug跟踪器上发现的唯一问题是在同一个文件中两次包含wp_list_comments(),情况并非如此。更新到最新版本也不能解决这个问题。
我注意到在debug.log文件中打印了下面的调试日志,但是只有一次,尽管页面已被重新加载了数百次:
WordPress database error You have an error in your SQL syntax; check the
manual that corresponds to your MariaDB server version for the right syntax to
use near 'WHERE AND comment_parent IN (61,62,66) ORDER BY comment_date_gmt
ASC, comment_' at line 1 for query WHERE AND comment_parent IN (61,62,66)
ORDER BY comment_date_gmt ASC, comment_ID ASC made by
require('C:\xampp\htdocs\boxify\chef\wordpress\wp-blog-header.php'),
require_once('C:\xampp\htdocs\boxify\chef\wordpress\wp-includes\template
loader.php'), include('C:\xampp\htdocs\boxify\chef\wordpress\wp-
content\themes\mytheme\single.php'), get_template_part, locate_template,
load_template, <...more files here...>, comments_template,
WP_Comment_Query->__construct, WP_Comment_Query->query, WP_Comment_Query-
>get_comments, WP_Comment_Query->fill_descendants问题发生在多个自托管wordpress安装上。
对于其他主题,比如二十六年或其他主题,我没有看到这种行为,所以在我这方面肯定是有问题的,我怀疑缓存配置,我没有碰过它。
此外,我已经检查了wp_reset_postdata()的使用情况,而在我的单个模板中没有。添加主题支持用于注释和所有内容。任何提示或方向,我应该进一步挖掘将是伟大的!
发布于 2016-06-24 18:55:54
找出了问题所在。
在代码的某个地方,在主循环的中间,get_template_part()包含了一个文件,在该文件中缺少了一个运行新WP_Query的函数wp_reset_postdata()。这使得全球$post变得腐败,至少在我看来是这样。
因为这个WP_Query被用来获得一个随机的帖子,这导致评论显示在那个随机的帖子上。有时它们存在,有时它们不存在。
另外,依赖于get_next_post()和get_previous_post()等依赖于$post的函数现在正在返回相对于新的随机post而不是旧post的结果,就像预期的那样。
只有当我注意到这些相邻的函数正在返回无效的结果时,我才了解问题的所在。
https://stackoverflow.com/questions/37782994
复制相似问题