正如@ tom-j-nowell在对OP的评论中所说,多站点可以使这一过程变得更加容易。
对于多站点,性能和安全性并不是真正的问题(至少不超过常规安装的问题),但是我同意多站点有时可能是一个问题,因为许多插件(自定义或第3方)可能不会可以在多站点上正常工作,或者可能是因为您想让不同网站的用户完全分开。
也就是说,您想要实现的目标并不难。
您需要在安装之间进行更改的是:
可以使用常量wp-config.php
来完成这些配置,唯一的问题是如何根据URL切换常量。
'SERVER_NAME'
至少在您的Web服务器配置正确的情况下,服务器变量才对您有用。
例如,您可以创建一个以/conf
相同级别的wp-config.php
文件和/WordPress
文件夹命名的文件夹。
在该文件夹中,您可以添加一些文件:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
在每个人里面你都可以做
$branch = 'branch1';
$base_dir = dirname( __DIR__) . "/{$branch}";
defined( 'WP_CONTENT_DIR' ) or define( 'WP_CONTENT_DIR', $base_dir );
// be sure WP understand URLs correctly
defined( 'DB_HOME' ) or define( 'DB_HOME', "{$branch}.example.com" );
defined('WP_SITEURL') or define('WP_SITEURL', "{$branch}.example.com/WordPress");
// adjust DB settings as needed
defined( 'DB_NAME' ) or define( 'DB_NAME', $branch );
defined( 'DB_USER' ) or define( 'DB_USER', $branch );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', '********' );
unset( $base_dir, $branch );
这将根据“分支”在每个配置文件上更改。
之后,wp-config.php
您可以使用自己的独特方式,例如:
$defaults_conf = [
'WP_CONTENT_DIR' => __DIR__ . '/branch1',
'DB_HOST' => 'localhost',
'DB_NAME' => 'branch1',
'DB_USER' => 'branch1',
'DB_PASSWORD' => '********',
];
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
require __DIR__."/conf/{$host}.conf";
}
array_walk($defaults_conf, function($value, $name) {
defined($name) or define($name, $value);
});
unset($defaults_conf, $host);
上面发生的是,根据服务器名称,您加载了另一个配置文件(如果找到),并且如果该配置文件未定义任何默认配置(或者如果未找到该文件),则默认设置为配置。
不错的事情是,添加一个新分支,您只需要创建分支文件夹并提供一个.conf
以新分支域命名的名称,就可以了,在WP端没有任何更改。
该行:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
是我获取域名的地方。作为首选,我使用的是环境变量,因为有可能$_SERVER['SERVER_NAME']
在命令行上下文中不起作用,例如使用WP CLI时。在这种情况下,您可以设置环境变量以强制WP使用特定分支中的设置。
请注意,在分支特定的配置文件中,我正在更改WP_CONTENT_DIR
和,它将自动将plugins和themes文件夹设置为相关/plugins
和/themes
分支子文件夹。
这里可能的问题是,如果您要共享/uploads
文件夹(文件上传到该文件夹)。
默认情况下,该文件夹是内容目录的子文件夹,因此使用上述工作流将成为/uploads
每个分支根文件夹的子文件夹。
如果这对您来说不是问题,那么就解决它,否则最简单的解决方案是/uploads
在每个分支文件夹中建立一个指向您要共享的实际上载文件夹的符号链接。