如何使WordPress数据库可移植并独立于url?

时间:2012-08-17 作者:navitronic

我即将在一个多人团队环境中着手开发WordPress。(一次有3人或更多人在同一代码库上工作,每个人都在本地开发)

对于我们使用过的其他CMS,每个人都将其安装指向同一个数据库,由于CMS/数据库的工作方式,这意味着我们都可以从同一个数据库将相同的内容输入到安装(位于不同的URL)中,而不会有太多问题(除了偶尔需要同步上传文件夹)

我的问题是,在WordPress中,是什么阻止我们使用相同的方法,以及我们如何解决这些问题?

WordPress的三份副本都来自同一个数据库。

http://dev.local/developer-a/
http://dev.local/developer-b/
http://dev.local/developer-c/

我希望不用说,这将只在发布之前的开发环境中进行。

主要问题对数据库中特定URL的引用(wp_postswp_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硬编码到数据库中的内容?

有什么我应该注意的符号链接问题吗?

任何人都能想到的其他问题?

我意识到这些问题非常具体,如果有什么不清楚的地方,请对此发表评论,我会修改/澄清。

谢谢

2 个回复
SO网友:davemac

我将回答问题2,注意数据库中的一些值存储在序列化数组中。例如,如果URL字符串的长度发生变化,并且它位于序列化数组中,则需要更新其索引。

您可以使用this PHP script 更新序列化数组中的所有值,或在自己的脚本中从命令行运行它

SO网友:s_ha_dum

问题1:除了帖子内容之外,您还可以在更多的地方使用URL进出数据库。我在中找到URL*_postmeta, *_comments, 和*_options (除了您定义的以外)。这不包括插件活动和Custom Meta Field 活动

问题2:为了方便起见,我有时也会将插件进行符号链接,而且大多数情况下它都能正常工作。有时不会。我无法告诉您导致问题的确切条件,但Javascript似乎确实是一个因素。

问题3:我预计*_options 表(如果有)。像激活插件和活动主题之类的东西都保存在那里,还有很多其他信息都是特定于站点的。

结束

相关推荐

Corrupt Wordpress Database

我认为这是最奇怪的文字印刷问题。一个拥有大量帖子数据库的客户网站已经有了自己的想法。前一分钟一切似乎都很好,接下来的帖子、类别和标签都不见了。此时仪表板告诉我9个类别中有2309个帖子,但当我单击admin中的categories链接时,列表中没有任何帖子。我可以在admin中看到所有帖子,但尽管它们过去被分配到类别并列出标签,但现在它们都“未分类”,没有标签。很明显,wordpress数据库在某种程度上已经损坏,但从哪里开始尝试修复呢!?以下是我迄今为止测试的内容:插件–我关闭了所有当前的插件。主题–我