问题
我即将在多人团队环境中进行一些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-plugins文件夹中的文件中。
该代码本质上通过用唯一令牌替换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选项。(同样,这仅用于开发),这意味着对于每个单独的WordPresses安装,发布内容在到达客户端时将看起来像在该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硬编码到数据库的东西吗?
我应该通过符号链接了解任何陷阱吗?
还有谁能想到的其他问题?
我意识到这些问题是非常具体的,如果尚不清楚,请对此发表评论,然后我将进行修改/澄清。
谢谢。