这是您的问题所在:
然后,我编辑了生成的.sql文件,以更新所有文件路径和URL引用以指向我们的生产站点。
你不能那样做。WordPress将许多选项存储为“序列化数据”,其中包含事物的字符串内容及其长度。因此,当您修改URL并更改长度时,序列化的数据将不再正确,PHP会拒绝它。
长期的问题是,基本上,您做错了。如果您要建立一个将要迁移其数据的开发站点,那么它应该具有与您的生产站点完全相同的URL。您可以手动编辑HOSTS文件,以为该生产域(例如example.com)提供不同的IP地址(例如127.0.0.1),因此“生产” URL将成为您的开发站点。然后,您可以使用该生产URL创建数据和链接以及所有其他内容,并且在迁移数据时,无需更改任何内容。
但是,短期内,不要在SQL文件上使用简单的文本搜索/替换。如您所知,这破坏了事情。
尽管我毫不犹豫地提出建议,但是有一种方法可以更改WordPress核心代码以处理这些损坏的序列化。您必须修改wp-includes / functions.php文件,并将maybe_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调整。