解决 wordpress 的 pagenavi 不显示的BUG

翟二喜

近段时间发现,新启用的 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,再试,成功。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: