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 /conf
pada tingkat yang sama dari wp-config.php
file yang dan /WordPress
folder.
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.php
Anda, 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 .conf
nama 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_DIR
dan yang secara otomatis akan mengatur plugin dan tema folder ke terkait /plugins
dan /themes
subfolder cabang.
Masalah yang mungkin terjadi di sini adalah jika Anda ingin membagikan /uploads
folder (tempat file diunggah).
Secara default folder itu adalah subfolder dari dir konten, jadi menggunakan alur kerja di atasnya akan menjadi /uploads
subfolder dari setiap folder root cabang.
Jika itu bukan masalah bagi Anda, daripada hanya pergi dengannya, jika tidak solusi termudah adalah membuat /uploads
di setiap folder cabang symlink ke folder unggahan nyata yang ingin Anda bagikan.