我即将在一个多人团队环境中着手开发WordPress。(一次有3人或更多人在同一代码库上工作,每个人都在本地开发)
对于我们使用过的其他CMS,每个人都将其安装指向同一个数据库,由于CMS/数据库的工作方式,这意味着我们都可以从同一个数据库将相同的内容输入到安装(位于不同的URL)中,而不会有太多问题(除了偶尔需要同步上传文件夹)
我的问题是,在WordPress中,是什么阻止我们使用相同的方法,以及我们如何解决这些问题?
WordPress的三份副本都来自同一个数据库。
http://dev.local/developer-a/
http://dev.local/developer-b/
http://dev.local/developer-c/
等
我希望不用说,这将只在发布之前的开发环境中进行。
主要问题对数据库中特定URL的引用(wp_posts
和wp_options
表)如果一个人安装了插件,其他人安装的插件将不会有插件,并且会导致数据库中的并发问题保持上载文件夹同步当前解决方案目前我已经为第一个问题准备好了解决方案。我将以下内容放在我的mu插件文件夹中的一个文件中。
该代码本质上是通过用唯一的标记替换url的任何实例来过滤进出数据库的帖子内容。
<?php
define(\'PORTABILITY_TOKEN\', \'{_portable_}\');
function portability_remove_home($content)
{
$content = str_replace(get_option(\'home\'), PORTABILITY_TOKEN, $content);
return $content;
}
add_filter(\'content_save_pre\', \'portability_remove_home\');
function portability_add_home($content)
{
$content = str_replace(PORTABILITY_TOKEN, get_option(\'home\'), $content);
return $content;
}
add_filter(\'the_content\', \'portability_add_home\');
add_filter(\'the_editor_content\', \'portability_add_home\');
我已经使用安装WordPress的环境通过php设置了home和siteurl选项来解决这些问题。(同样,这仅用于开发)这意味着,对于每个单独的安装,WordPress发布的内容在到达客户端时看起来都像是在该url上运行的。
<?php
if (!defined(\'WP_HOME\'))
{
// define WP_HOME (aka url of install) based on environment.
// IF THIS ISN\'T WORKING, DEFINE IT EARLIER.
define(\'WP_HOME\', \'http://\' . $_SERVER[\'HTTP_HOST\'] . str_replace($_SERVER[\'DOCUMENT_ROOT\'], \'\', dirname(__FILE__) ) );
}
if (!defined(\'WP_SITEURL\'))
{
// Assumes WordPress is in a separate directory called \'wp\', relative to WP_HOME.
// IF IT\'S DIFFERENT, DEFINE IT EARLIER.
define(\'WP_SITEURL\', WP_HOME . \'/wp\');
}
第二个和第三个问题似乎可以通过适当的符号链接来解决(都是在同一台机器上开发的)
实际问题我是否可以改进对不同URL的处理?我是否遗漏了将url硬编码到数据库中的内容?
有什么我应该注意的符号链接问题吗?
任何人都能想到的其他问题?
我意识到这些问题非常具体,如果有什么不清楚的地方,请对此发表评论,我会修改/澄清。
谢谢