由于原有的共享主机已经快要到期,在综合权衡了一下,盆地购买了另外一家的虚拟主机服务,这样就碰到了需要迁移博客的问题,先拿之前做的一个小站试验,具体迁移过程随后再详述,本文主要谈到遇到的另外一个问题。

    在顺利完成迁移后,其他都没有问题,但盆地发现所用的PageNavi扩展的分页链接中,所有的页面链接都有问题。

    比如假设博客地址为http://www.penddy.com,但指向的链接地址变成了http://www.penddy.com/http://www.penddy.com/index.php/page/2 ,这样所有的页面跳转链接是有错误的。

    由于google无果,只好凭着盆地对php的一知半解和之前调试代码的经验,查找问题过程如下:

    1.先查看"wp-content/plugins/wp-pagenavi"下的wp-pagenavi.php文件,在其中的wp_pagenavi函数中,可以看到其调用了_wp_pagenavi_single函数,在同一个文件中查看_wp_pagenavi_single函数,发现其调用了get_pagenum_link函数。

    2.get_pagenum_link函数位于wp-includes下的link-template.php文件中,经过多次打印调试信息,发现如下一句代码返回的结果不一致:

    $request = remove_query_arg( ‘paged’ );

    3.进一步查看functions.php中的remove_query_arg函数,可见其中调用了add_query_arg函数,再通过google查看此函数的一些介绍《常用函数-add_query_arg()》,可见其中有一个描述:"如果没有参数,该函数会在处理后返回$_SERVER[‘REQUEST_URI’]",虽然在调用时有参数,但应该也是和此参数有关。

    4.打印$_SERVER[‘REQUEST_URI’]参数发现在两个不同的共享主机中显示结果不一样,一个为空,一个则为页面URl。

    5.再简单google了一下,说可能是因为PHP5中才支持此使用方法,然后对比一下两个共享主机的PHP,一个是PHP4,一个是PHP5。

    6.想不到太好的办法,只好把下面一行注释掉,暂时解决了此问题。

    $request = remove_query_arg( ‘paged’ );

    7.盆地用的版本是WordPress 2.9.2版,更新到WordPress 3.0也无法解决此问题。这个问题应该是wordPress的问题,因为PageNavi调用的是WordPress自身的函数get_pagenum_link返回的结果有问题。

     至此暂时通过这种方法解决了,不知道是否是盆地某些地方配置有误还是确实是WordPress有问题抑或PageNavi使用使用了不该使用的函数,希望知道的人告知。

(完)

标签: , ,
If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!

6,546次阅读 | penddy on 2010-7-12 17:03 | File Under 互联网 | No Comments -