問題描述

我看到一些看起來很相似的問題,但他們都是以 multisite 結束的。對於可維護性,效能和安全性,我不想使用多站點。所以請忍受我。

這正是我在想的:

.
|_____branch1 // for branch1.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch2 // for branch2.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch3 // for branch3.domain.com
|  |_____themes
|  |_____plugins
|
|_____index.php
|_____WordPress
|_____wp-config.php

您可以看到,每個域都有自己的資料庫和內容目錄,但只有一個 WordPress 例項。現在,主題,外掛和資料庫變得更小,獨立。那麼,維護,規模更容易

但是有可能嗎如果您以前遇到過同樣的問題,請分享您的想法!我非常感謝你的幫助。

最佳解決方案

正如 @tom-j-nowell 在對 OP 的評論中所說的,多站點可以使這更容易。

效能和安全性對於多個站點來說並不是一個問題 (至少不是常規安裝的問題),但是我同意多站點有時可能是一個問題,因為很多外掛 (自定義或第三方) 可能不會在多站點上正常工作,或者是因為要讓不同網站的使用者完全分離。

那就是說你想要實現的不是那麼難。

您需要在安裝之間進行更改:

  • plugins 資料夾

  • 主題資料夾

  • 資料庫設定

那些配置可以用 wp-config.php 中的常量來完成,你唯一的問題是如何根據 URL 進行切換。

伺服器變數'SERVER_NAME'應該適合您,至少如果您的 Web 伺服器配置正確。

例如,您可以在 wp-config.php 檔案和/WordPress 資料夾的同一級別建立名為/conf 的資料夾。

在該資料夾中,您可以新增一些檔案:

  • 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 );

這將根據”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 使用特定分支的設定。

請注意,在 branch-specific 配置檔案中,我正在更改 WP_CONTENT_DIR,並將自動將外掛和主題資料夾設定為相關的/plugins/themes 分支子資料夾。

這裡有一個可能的問題是如果你想共享/uploads 資料夾 (檔案上傳的地方) 。

預設情況下,該資料夾是內容目錄的子資料夾,因此使用上面的工作流將是每個分支根資料夾的/uploads 子資料夾。

如果這不是一個問題,而不是隻是去與它,否則最簡單的解決方案是將/uploads 在每個分支資料夾中的一個符號連結到要共享的真正的 uploads 資料夾。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。