这就是您的问题所在:
然后我编辑了结果。sql文件更新所有文件路径和URL引用,以指向我们的生产站点。
你不能那样做。WordPress将许多选项存储为“序列化数据”,其中包含事物的字符串内容及其长度。因此,当您修改URL且长度更改时,序列化的数据不再正确,PHP会拒绝它。
长期的问题是,基本上,你做错了。如果您正在设置一个将迁移其数据的开发站点,那么它应该具有与您的生产站点完全相同的URL。您可以手动编辑主机文件,为生产域(如example.com)提供不同的IP地址(如127.0.0.1),因此“生产”URL将成为开发站点,仅供您使用。然后,您可以使用该生产URL创建数据、链接和其他所有内容,并且在迁移数据时,无需对其进行任何更改。
但是,短期内,不要对SQL文件使用简单的文本搜索/替换。正如你所发现的,这会破坏一切。
虽然我不太愿意提出建议,但有一种方法可以修改WordPress核心代码来处理这些中断的序列化。您必须修改wp包含/功能。php文件,并将maybe\\u unserialize()函数更改为:
function maybe_unserialize( $original ) {
if ( is_serialized( $original ) ) {
$fixed = preg_replace_callback(
\'!(?<=^|;)s:(\\d+)(?=:"(.*?)";(?:}|a:|s:|b:|i:|o:|N;))!s\',
\'serialize_fix_callback\',
$original );
return @unserialize( $fixed );
}
return $original;
}
function serialize_fix_callback($match) { return \'s:\' . strlen($match[2]); }
这不是一个可行的长期解决方案。它应该只用来让你现在起床工作。从长远来看,您需要修复您的开发过程,这样您就不必一开始就进行这种URL搜索。