近段时间发现,新启用的 wordpress 系统中,所有与翻页有关的位置都不显示翻页页号,上一页、下一页都不出现。
今天,花了三个小时的时间找问题原因。
因为翻页不出现的问题包括后台管理中贴子的翻页、评论的翻页,BLOG首页下面的翻页、分类归档时间归档下面的翻页 等等,所以猜测是在数据库查询方面出了问题。
先是发现 max_num_pages 取不到值,每次得到的都是 0。追根溯源,他的值是在 wp-includes/query.php 中由 $this->found_posts / $q['posts_per_page'] 而得,而 $this->found_posts 在此时已经值为 0。
再向前找原因,$this->found_posts 由 $this->request 查询后,通过 "SELECT FOUND_ROW();" 而得。调试,中断输出显示这里得到的值为 0。
将 $this->request 的内容输出,在 mysql 里直接输入这条查询,后跟 SELECT FOUND_ROWS(); 结果正确。但是在 wordpress 里这样的顺序就得不到结果。问题就出在这里。
猜测,是 $wpdb->get_var( $found_posts_query ); 返回值有问题。在他之前加了一句,
$found_posts_query = "SELECT 300 AS `FOUND_ROWS()`";
结果正常,可以返回 300,问题不在这里。
猜测,是 $wpdb 两次查询中间间断,所以得不到正确的返回值?真是这样的话就不好解决了。这里费了一个来小时找问题。
误打误撞,发现这里得不到正确值的原因是 php 中关于 mysql 的设定。
mysql.trace_mode = Off;
改正后,重启动 apache,再试,成功。