Seperti @ tom-j-nowell mengatakan dalam komentar untuk OP, multisite dapat membuat ini lebih mudah.
Kinerja dan keamanan sebenarnya bukan masalah bagi multisite (setidaknya, tidak lebih dari itu untuk instalasi reguler), tetapi saya setuju bahwa multisite kadang-kadang bisa menjadi masalah, karena banyak plugin (baik custom atau pihak ke-3) mungkin tidak berfungsi dengan baik di multisite, atau mungkin karena Anda ingin memisahkan pengguna dari situs web yang berbeda.
Yang mengatakan apa yang ingin Anda capai tidaklah sulit.
Yang perlu Anda ubah di antara instalasi adalah:
- folder plugin
- folder tema
- pengaturan basis data
Konfigurasi tersebut dapat dilakukan dengan menggunakan konstanta dalamwp-config.php satu-satunya masalah Anda adalah bagaimana cara mengubahnya berdasarkan URL.
Variabel server 'SERVER_NAME'harus bekerja untuk Anda, setidaknya jika server web Anda dikonfigurasi dengan benar.
Misalnya Anda dapat membuat folder bernama /confpada tingkat yang sama dari wp-config.phpfile yang dan /WordPressfolder.
Di folder itu Anda dapat menambahkan beberapa file:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
di dalam masing-masing Anda dapat melakukan sesuatu seperti
$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 );
Ini akan berubah pada setiap file konfigurasi sesuai dengan "cabang".
Setelah itu, dalam keunikan wp-config.phpAnda, Anda dapat sesuatu seperti:
$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);
Apa yang terjadi di atas adalah bahwa berdasarkan nama server Anda memuat file konfigurasi yang berbeda (jika ditemukan) dan jika file konfigurasi tidak menentukan konfigurasi default apa pun (atau jika file tidak ditemukan) konfigurasi ditetapkan per default.
Yang menyenangkan adalah bahwa untuk menambah cabang baru, Anda hanya perlu membuat folder cabang dan memberikan .confnama setelah domain cabang baru, dan Anda selesai, tidak ada yang berubah di sisi WP.
Garis:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
adalah tempat saya mendapatkan nama domain. Sebagai opsi pertama saya menggunakan variabel lingkungan, karena ada kemungkinan $_SERVER['SERVER_NAME']tidak akan berfungsi pada konteks baris perintah, seperti kita saat menggunakan WP CLI. Dalam situasi tersebut, Anda dapat mengatur variabel lingkungan untuk memaksa WP menggunakan pengaturan dari cabang tertentu.
Perhatikan bahwa di cabang-spesifik file konfigurasi saya mengubah WP_CONTENT_DIRdan yang secara otomatis akan mengatur plugin dan tema folder ke terkait /pluginsdan /themessubfolder cabang.
Masalah yang mungkin terjadi di sini adalah jika Anda ingin membagikan /uploadsfolder (tempat file diunggah).
Secara default folder itu adalah subfolder dari dir konten, jadi menggunakan alur kerja di atasnya akan menjadi /uploadssubfolder dari setiap folder root cabang.
Jika itu bukan masalah bagi Anda, daripada hanya pergi dengannya, jika tidak solusi termudah adalah membuat /uploadsdi setiap folder cabang symlink ke folder unggahan nyata yang ingin Anda bagikan.