问题描述

我正在寻找最好和最安全的方式来开发本地的多个子站点使用多站点,并将它们移动到生产环境,当他们准备好了。

我已经使用现在已经存在的第一个子站点迁移了完整的多站点安装。我宁愿在本地服务器上开发其他站点,所以我将生产服务器单独放置,但显然我无法再进行完全迁移。

我寻找一个解决方案,但我发现的一切都是关于将单个站点移动到多个站点,或者相反,不要将子站点从多站点移动到多站点。

我想保留所有内容:设置,小工具等。

最佳解决方案

这可能有点乏味,但希望这有助于。从一个环境到下一个环境的变化越少,这个过程就越不痛苦。特别是,如果域,站点 id,文件路径保持不变,这个过程就不那么痛苦了。

这篇文章假设了一些数据库管理的知识。这不是一个完整的步骤,因为您应该搜索论坛,并可能创建一个特定于您遇到问题的步骤的线程,例如,如果您需要帮助导出数据库表。

最重要的事情是备份您的本地开发站点和新位置的整个数据库和文件,以防万一出现问题。期待有问题。如果没有,会惊喜。

移动主题文件应该很简单。将您的主题文件上传到 wp-content /themes 目录,并照常激活它。我假设这是所有博客都可以访问的共享主题。

将插件文件上传到新位置的 wp-content /插件。不要激活它们

请注意,您迁移的博客的任何内容将位于 wp-content/blogs.dir/2/files 的目录中,其中 2 是站点 ID 。如果可以在新位置维护此站点 ID,则应有助于在迁移到新位置后尽量减少数据库中的冲突。否则,您将不得不更新数据库以反映新的路径。

您将需要导出与您尝试迁移的博客相关的多站点表,并将其导入到新位置。您将必须编辑存储与您正在迁移的博客相关的数据的表。确保这些表的前缀在新位置相同。

例如,您的博客的 wp_blogs 表包含允许 WordPress 多站点识别和使用您的博客的博客 ID,站点 ID,域和路径。编辑这些不再正确的任何反映新位置的内容,但请尝试执行此操作之前阅读本文的其余部分。

参见 Multisite Table Overview

要迁移您的 WordPress 和插件设置,要转移博客,您需要在本地停用所有插件,然后导出您的 site specific tables(codex 参考),包括那些插件。将这些表导入新位置的数据库。

确保新位置使用与导入的表相同的数据库前缀。该前缀将包含您的博客的站点 ID,看起来像 wp_2_options, wp_2_posts, wp_2_postmeta 。见 Exploring WordPress Multisite by Lisa Sabin-Wilson

我假设你知道如何通过 phpmyAdmin 导入/导出,或者使用终端中的 mysqldump 命令。这超出了这篇文章的范围,但这里是一个应该有帮助的导出示例。

How do you mysqldump specific table(s)?(语法编辑稍微更清楚):

If you are dumping tables t1, t2, and t3 from database named mydb

mysqldump -u <username> -p <password> mydb t1 t2 t3 > mydb_tables.sql

在新站点上启动插件之前,请先在 admin cp 中进行永久链接设置,并保存设置,将数据库文件更新为新的站点 URL 。激活您的插件,看是否有任何问题。

您可能遇到的一个问题是您的表中的数据序列化。

「[…] 对旧域名或位置的引用将保留在数据库中,这可能会导致链接或主题显示问题。

如果您在整个数据库中进行搜索和替换以更改 URL,则可能会导致数据序列化问题,因为某些主题和小工具存储的 URL 的长度标记为 「When Your Domain Name or URLs Change

请记住,数据序列化可能会导致与您的插件相关的数据库表中的冲突。不要对存储在数据库中的 URL 执行手动搜索和替换,而是使用之前的鳕鱼链接中推荐的 database search and replace script 。如果数据库中只有少数序列化实例,您可以通过 phpMyAdmin 手动进行编辑,也可以通过自己的首选方式来管理数据库。

您可能遇到的另一个问题是,需要更新存储在数据库表中的任何不正确的文件路径以反映新位置。这可能是由插件使用的媒体目录或目录,这取决于插件的设计。同样,您将需要使用搜索和替换脚本来确保在更新文件路径时没有序列化冲突。或者,您可以通过表格手动更新它们。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。