我有一个实时WordPress安装和一个本地安装,用于开发目的。我刚刚导出了live数据库,用本地URL替换了所有出现的live siteurl,并将其导入到我的开发机器上。
问题是,在我的开发机器上,所有用户都失去了任何权限。登录时,我得到:
Notice: Undefined offset: 2 in /var/www/mysite/wp-admin/includes/plugin.php on line 1390
在一个页面模板上,我用
global $current_user;
var_dump( get_currentuserinfo() );
这将在我的开发计算机上返回NULL,并在实时安装上返回正确的用户信息。我仔细检查了表前缀、权限,尝试了干净的WordPress安装等,但没有成功。令人困惑的是,我可以通过自定义sql查询很好地查询userinfo。
编辑:进一步检查后,我发现全局$wp\\u角色不包含任何用户角色和功能。WordPress无法从数据库中检索此内容。。。
编辑2:很抱歉进行了编辑。但我发现了问题所在。在wp\\u options表中有一行“wp\\u user\\u roles”。值,一个未序列化的字符串确实以某种方式包含空格,这会导致在尝试取消序列化字符串时出错。我用实时站点的值替换了数据库值,现在一切都正常了。
最合适的回答,由SO网友:markratledge 整理而成
我刚刚导出了live数据库,用本地URL替换了所有出现的live siteurl,并将其导入到我的开发机器上。
使用文本编辑器查找/替换会中断序列化数据;您必须在phpmyadmin中使用MySQL查询更改值:
UPDATE wp_options SET option_value = replace(option_value, \'http://www.olddomain.com/\', \'http://www.newdomain.com/\') WHERE option_name = \'home\' OR option_name = \'siteurl\';
UPDATE wp_posts SET guid = replace(guid, \'http://www.olddomain.com/blog/\',\'http://www.newdomain.com/\');
UPDATE wp_posts SET post_content = replace(post_content, \'http://www.olddomain.com/blog/\', \'http://www.newdomain.com/\');
UPDATE wp_postmeta SET meta_value = replace(meta_value, \'http://www.olddomain.com/blog/\', \'http://www.newdomain.com/\');