解决WordPress无法自动更新插件及主程序问题
最近升级到WordPress2.7后,有一个一直困扰我的问题终于到了不得不解决的时候了。 问题描述: 使用WordPress2.7的自动升级功能时,提示:You do not have sufficient permissions to update plugins for this blog或者:您没有权限更新插件。 在插件管理页面,如果有插件更新,应该会自动提示,并有一个直接升级的选项。但在某次升级后,该选项消失。只能手动FTP更新插件。 问题分析 (不想看分析的同学,请直接拖拉到后面的解决方案): 今年WordCamp期间,LEMONed同学怀疑是文件版本不协调或不完整,建议我重新安装整个WordPress来解决这个问题。但是尝试后,无效。 后来怀疑是帐号权限问题,经过检查数据库,发现自己的帐号确实是Administrator,帐号等级也是最高的10.这条路,也死了。 就这样,这个问题放了3个月,直到前几天更新了WordPress2.7。在这次的更新里,我最喜欢的就是主程序自动更新功能,但如插件一样,无法更新。 但这一次的问题比上一次清晰了很多,因为主程序更新是靠wp-admin\update-core.php这个文件实现的。既然是这里报了错,那么我们就从这个文件开始分析吧。 我分析了一下update-core那个文件,第一句就要判断if ( ! current_user_can(‘update_plugins’) )再去capabilities.php里面看了看current_user_can这个函数,发现是一个权限分配函数,判断方法有点诡异(hc才疏学浅,没见识过这类权限分配方法),结合codex的数据库结构看了半天才看懂: function current_user_can( $capability ) { $current_user = wp_get_current_user(); if ( empty( $current_user ) ) return false; $args = array_slice( func_get_args(), 1 ); $args = array_merge( array( $capability [...]