警告:传入的文字墙..
@Rob,当谈到团队合作时,WP 简直就是地狱;然而,通过一些工作(和一些符号链接魔法),您可以设置您的 WP 项目,以便您的主题或插件的工作文件可以独立于 WP 核心。其中一些使用 WP 的内置机制,其中一些与 SVN 外部相关(提示)。我会让你用谷歌搜索,因为它超出了你的问题范围。
关于 WP GUID 的说明
警告:不要更换导向装置。WP GUID 可用于外部提要阅读器。提要阅读器使用 GUID 来确定内容是否是最新的。更改它基本上会告诉那些读者,提要中的每个条目都是新的(尤其是对于帖子)。这会为您不需要的遗留内容带来很多额外的开销。GUID 是一项旧功能,很久以前就应该更改为 UUID。从技术上讲,您可以使用 guid 字段中的任何内容,但 WP 使用永久链接来填充该字段 - 遗留。
唯一可以接受更改 GUID 的情况是新的 wp 项目,其中内容是全新的。
要回答您的问题:
WP 在其数据库中的十几个地方存储对当前域的显式引用。这些位置很难追踪和更改,您最不想做的事情是手动编辑您要导入生产的 *.sql 转储文件。它只是带有不良开发实践的味道。
有几种方法可以解决这个问题,但如果您已经进入了开发生命周期,这意味着需要做一些工作。我将解决第一种情况。
案例 1:项目启动
当您开始项目时,您可能已经准备好开发沙箱和数据库。您现在可能已经安装了 WP,因此对于所有意图和目的而言,它基本上都是干净的。
您要做的第一件事是更改配置文件的工作方式。大多数人都保留标准wp-config.php
文件(除了团队生产项目,实际上没有任何理由编辑它。)但是,您可以使用一些逻辑对其进行设置,以包含特定于开发人员或特定于环境的配置文件。例如:
wp-config.php
switch( $current_environment )
{
case 'jack.local' : include( 'wp-config-jack.php' ) break; // Jack's sandbox
case 'jill.local' : include( 'wp-config-jill.php' ) break; // Jill's sandbox
default : ... break; // Staging & Production
}
您要做的下一件事是将文件的正常内容包含wp-config.php
在一个wp-config-remote.php
文件中以用于登台/生产。接下来,编辑您的wp-config-remote.php
文件,以便您可以在多个环境(暂存、生产)中使用 1 个配置文件。一个if(...)
或switch(...)
块就是你所需要的,例如
if( (strpos( $_SERVER[ "HTTP_HOST" ], "localhost" ) !== false) || (strpos( $_SERVER[ "HTTP_HOST" ], "local" ) !== false) )
(有更好的方法来写那个条件......这只是一个粗略的例子。)
配置特定于每个远程环境的所有 WP 设置。希望您将其签入源代码控制存储库。
这基本上可以让您腾出时间,让您的团队拥有特定于其环境的配置设置,同时让您检查每个远程环境的设置一次。
您要做的第二件事是建立一种机制来拦截和过滤特定于域的链接。此机制背后的意图是用令牌/占位符替换对当前域的任何引用。我在这里概述了执行此操作的技术:http: //www.farfromfearless.com/2010/09/07/url-token-replacement-techniques-for-wordpress-3-0/
它基本上相当于创建一个过滤器,在内容提交到数据库之前和内容呈现到页面之前对内容起作用。该技术是透明的,因为它不会影响正常的编辑实践。您仍然可以在编辑器中创建内容,参考其他页面、帖子、图像等,并且在不同环境中编辑时它们会很好地显示出来。
在最近的项目中,我将所有这些和其他一些 WP“规范化”功能打包到一个我设置并忘记的引导插件中。
案例2:正在进行的项目
现在,就您而言,您在开发生命周期中走得更远。替换这些域引用需要做一些工作,但如果您按照我在上面概述的步骤进行操作,您应该只需要执行一次。我在上面提供的链接为您提供了完成这项工作所需的 SQL。请务必注意,在多站点环境中,您需要为您创建的每个“子站点”执行此操作。
更新数据库后,我建议您实施案例 1中的步骤,这样您就不必再次重复这些步骤。
奖励:同步内容
同步内容很痛苦。我在最近的项目中所做的是让客户在登台服务器上工作,并将变更上游推广到生产。那么,这让您可以将下游同步到您的沙箱。编写一个 shell 脚本,从暂存数据库中转储 SPECIFIC 内容表的副本,并将它们导入到沙盒数据库中(有效地替换内容表。)您应该能够看到域令牌替换技术的好处。
未检入源代码控制的图像(例如客户端图像)应推送到公共位置,例如 S3 存储桶。有 WP 插件可以帮助您。这将节省大量跨环境同步资产的时间。
我希望这对您有所帮助——如果没有,总会有 SilverStripe ;)