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