趁着今天有空,把 WordPress 维护了一把,不小心,碰到如下两个问题:

错误1:Call to undefined function wp_get_current_user()

我准备在后台把 WordPress 从当前版本升级到 3.1.3,可是却出现了如下错误提示:

<pre>

Fatal error: Call to undefined function wp_get_current_user() in /home1/cookwhyc/public_html/wp-includes/capabilities.php on line 1028

<p>
  <a href="http://wordpress.org/support/topic/fatal-error-call-to-undefined-function-wp_get_current_user-4">上 WordPress 官方论坛找了找几处说法</a>,原因应该是一些插件还停留在旧版本的 WordPress 架构上,还会用旧方法调用 wp_get_current_user() 这类函数,引用一位人士的解释:
</p>

<pre>

Esmi - the problem isn’t that it isn’t there. Its that current_user_can is being called by the plugin and for some reason although capabilities.php has been loaded (which contains the current_user_can function) that function calls wp_get_current_user which is defined in pluggable.php but hasn’t been loaded when the call is made

I think its actually a bug in WordPress - the solution is to add a require_once call to the top of capabilities.php.

<p>
  <a href="http://www.hikaro.com/internet/web-design/wordpress/fatal-error-call-to-undefined-function-wp_get_current_user-on-wordpress-3-0.html">解决办法</a>可以在 /wp-includes/capabilities.php 文件正式代码的开头,添加下面这行语句:
</p>

<pre>

require_once(‘pluggable.php’);

<p>
  希望以后的 WordPress 版本自动兼容这些问题。
</p></p>

错误2:You do not have permission to access this page.

在解决了上述问题后,我在控制面板点击升级到 3.1.3 这个链接,却又出现了错误页面,提示以下错误:

<pre>

You do not have permission to access this page.

<p>
  这个问题比较怪异,除了无法通过 Network Admin 部分来管理站点外,其它一切都正常,包括博客的前端页面及各个独立博客的管理面板。
</p>

<p>
  即使我<a href="http://codex.wordpress.org/Updating_WordPress">手动升级 WordPress</a> 到了 3.1.3,依然没有办法解决这个没有权限访问的问题。
</p>

<p>
  这个问题应该是由于插件不兼容新版本的 WordPress 造成的,手动删除了该插件即可解决此类问题。
</p>

<p>
  想要手动删除某个插件,直接到下面这个目录删除该插件即可:
</p>

<pre>

/wp-content/plugins

<p>
  在我这里,是由插件 <a href="http://wordpress.org/extend/plugins/ad-inserter/">Ad Inserter</a> 造成的。不知道为什么,Ad Inserter 在我的 3.1.3 版本 WordPress 里使用就会有这个问题。
</p>

<p>
  经验总结:升级 WordPress 之前,一定要先把所有的插件都关闭,然后仔细地检查一下所有的插件是否兼容新版本的 WordPress,否则就很难找到具体是哪个插件出了问题。
</p></p>