Як заявив @ tom-j-nowell у коментарі до ОП, багатомісний сайт може полегшити це.
Продуктивність та безпека насправді не є проблемою для багатосайтових сайтів (принаймні, не більше, ніж вони призначені для звичайних установок), але я погоджуюся, що багатомісний сайт іноді може бути проблемою, тому що багато плагінів (або замовних, або сторонніх) можуть не мати працювати належним чином на багатосайтових веб-сайтах, або, можливо, тому, що ви хочете, щоб користувачі різних веб-сайтів були повністю розділені.
Та сказати, що ти хочеш досягти, не так вже й важко.
Що потрібно змінити між установкою:
- папка плагінів
- папки тем
- налаштування бази даних
Цю конфігурацію можна зробити за допомогою констант уwp-config.php
вашій єдиній проблемі - як перемикати їх на основі URL.
Серверна змінна 'SERVER_NAME'
повинна працювати для вас, принаймні, якщо ваш веб-сервер налаштований належним чином.
Наприклад, ви можете створити папку, названу /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
папки папки.
Тут можлива проблема, якщо ви хочете поділитися /uploads
папкою (куди завантажуються файли).
За замовчуванням ця папка є підпапком вмісту dir, тому використання робочого процесу над нею буде /uploads
підпапкою кожної гілки кореневої папки.
Якщо це не є проблемою для вас, ніж просто піти з нею, інакше найпростішим рішенням буде зробити /uploads
в кожній папці гілки символьне посилання на реальну папку завантажень, якою ви хочете поділитися.