ดังที่@ tom-j-nowellกล่าวไว้ในความคิดเห็นของ OP แล้วเว็บไซต์หลายรายการสามารถทำให้สิ่งนี้ง่ายขึ้น
ประสิทธิภาพและความปลอดภัยไม่ใช่ปัญหาสำหรับหลายไซต์ (อย่างน้อยไม่เกินกว่าสำหรับการติดตั้งปกติ) แต่ฉันยอมรับว่าบางครั้ง Multisite อาจเป็นปัญหาได้เนื่องจากปลั๊กอินจำนวนมาก (กำหนดเองหรือบุคคลที่สาม) อาจไม่ ทำงานอย่างถูกต้องกับหลายไซต์หรืออาจเป็นเพราะคุณต้องการให้ผู้ใช้แยกเว็บไซต์ต่าง ๆ ออกจากกันอย่างสมบูรณ์
ที่กล่าวถึงสิ่งที่คุณต้องการบรรลุไม่ใช่เรื่องยาก
สิ่งที่คุณต้องเปลี่ยนระหว่างการติดตั้งคือ:
- โฟลเดอร์ปลั๊กอิน
- โฟลเดอร์ธีม
- การตั้งค่าฐานข้อมูล
การกำหนดค่าเหล่านั้นสามารถทำได้โดยใช้ค่าคงที่ใน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
symlink ไปยังโฟลเดอร์อัพโหลดจริงที่คุณต้องการแชร์ในแต่ละโฟลเดอร์สาขา