जैसा कि @ tom-j-nowell ने ओपी को टिप्पणी में कहा, मल्टीसाइट इसे आसान बना सकता है।
प्रदर्शन और सुरक्षा वास्तव में मल्टीसाइट के लिए एक समस्या नहीं है (कम से कम, वे नियमित प्रतिष्ठानों के लिए अधिक नहीं हैं), लेकिन मैं सहमत हूं कि मल्टीसाइट कभी-कभी एक समस्या हो सकती है, क्योंकि बहुत सारे प्लगइन्स (या तो कस्टम या 3 डी पार्टी) नहीं हो सकते हैं मल्टीसाइट पर ठीक से काम करें, या शायद इसलिए कि आप विभिन्न वेबसाइटों के उपयोगकर्ताओं को पूरी तरह से अलग रखना चाहते हैं।
कहा कि आप जो हासिल करना चाहते हैं, वह उतना कठिन नहीं है।
स्थापना के बीच आपको क्या बदलने की आवश्यकता है:
- प्लगइन्स फ़ोल्डर
- थीम फ़ोल्डर
- डेटाबेस सेटिंग्स
उन कॉन्फ़िगरेशन को आपकी एकमात्र समस्या में स्थिरांक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आप प्रत्येक शाखा फ़ोल्डर में वास्तविक अपलोड फ़ोल्डर जिसे आप साझा करना चाहते हैं, के लिए सहिष्णु हो ।