web-dev-qa-db-ja.com

第3レベルドメインでワードプレスネットワークを設定する

私はWordPressネットワークインストールの設定を検討しています。希望するドメインレイアウトがうまく収まらなくなるまで、すべてが順調に進んでいます。

私は以下のようにレイアウトを作りたいです。

blog。*。stackexchange.com

そのため、たとえば、ネットワーク内に複数のサイトがあるとします。

blog.wordpress.stackexchange.com
blog.Apple.stackexchange.com
ブログ。$ site.stackexchange.com

I think これはいくつかの創造的な書き換えルールと手動のDNS介入でうまくいくことができましたが、DNS以外のすべての作成を他の誰かに引き渡すことができる設定が必要でした。 DNSに必要なすべてのサブドメインを自動的に作成するためのプロセスがすでにあります。

私の遊び方から読んでWP 本当に サイトを次のレベルのドメインにしたいので、上の例では、メインのWPブログにしたいです。 stackexchange.comとネットワークブログではwordpress.stackexchange.comにあります。

目的の効果を達成するための方法はありますか、それともblog.stackexchange.com/$siteを実行するルートに進むべきでしょうか。

11
Zypher

これには Domain Mapper プラグインを使用できます。欠点は、各サブブログを手動で設定することです。

3
Wietse Venema

あなたはカスタマイズされたsunrise.phpファイルでこれをすることができました。これは本質的にドメインマッピングプラグインのしくみですが、かなりフロントエンドになっています。慣習的なものについては、基本的に同じことをするために簡単なPHPを書くことができます。

マルチサイトの本質は、どのサイトにサービスを提供するかを考え出すことです。ドメインマッピングプラグインはwp_domain_mappingテーブルを作成し、そこに情報を格納することによってこれを行います。したがって、xxx​​.comの要求を受け取ると、そのテーブルを調べて、それがblog_id 123に対応していることがわかります。

まず、WordPressのセットアップを行い、それをマルチサイトにします。それが実際にどこにあるのかは問題ではありません。私たちはそれをすべて変更するからです。簡単にするために、私はblog.stackexchange.comに置き、それをサブディレクトリタイプのサイトにします(それらはより簡単です)。作成されたサブディレクトリは、おそらくナメクジでしょう。/wordpress、/ Apple、/ whatever。

それで、はい、まず始めに、実際にblog.stackexchange.com/wordpressでライブにしています。これをステージング環境と考えてください。各サイトを作成するときは、マッピングを有効にするまで、ここでそれを行うことができます。

プラグインを使わずにドメインマッピングを自分で行うには、次のようにします。

ステップ1:wp-config.phpファイルの先頭にdefine( 'SUNRISE', 'on' );を追加してください。

ステップ2:wp-contentディレクトリにsunrise.phpファイルを作成します。まず最初に<?phpを一番上に置きます。

ステップ3:sunrise.phpファイルで、どのサイトを読み込むかを決定するためのロジックになります。

これを$_SERVER[ 'HTTP_Host' ]変数に基づいて行います。それをどうやってやるのかは簡単です。 '/blog\.(.*)\.stackexchange\.com/'を探すための正規表現を書いてからデータベースでそのビットを探すだけなら、それを実行できます。

ここでは "サブディレクトリ"と同じスラッグを使用しているので、別のテーブルは必要ありません。メインのwp_blogsテーブルを見れば、必要なサイトを見つけることができます。これに似たもの:

$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );

$ current_blogを入手したら、次のコードが必要です。

$current_blog->domain = $_SERVER[ 'HTTP_Host' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;

これはWordPressのMU関数にそれをさせる代わりに$ current_blogと$ current_siteグローバル変数を事前に定義します。

これはサイトを立ち上げて動作させるのに十分でしょう(あなたのDNSがそれを指すようにし、仮想ホスティングのものが整理された後に)。/wordpress、それがこのサイトが実際に存在する場所だからです。また、Canonical URL関数はおそらくURLを気に入らず、またリダイレクトします。

これらの問題を解決するには、サイトに関連付けられているURLのいくつかを事前に定義しておくことをお勧めします。 WP_SITEURLやWP_HOMEのようなもの。また、WP_CONTENT_URL、WP_PLUGIN_URL、およびWPMU_PLUGIN_URL。これは、URLが調整されているほとんどの場合をカバーするはずです。

最後に、「COOKIE_DOMAIN」を設定します。あなたはおそらくログイン全体を共有したいと思うので、それをstackexchange.comに設定するか、または共有ログインにしたくない場合はそれ以上に設定することができます。

通常のstackexchangeログインシステムをWordPressに統合することについて話したいのであれば、私もそれに関する質問に答えることができますが、それはもう少し詳細な回答になるでしょう。 :)

あなたがこれでより多くの援助を望むならば、私に電子メールを送ってください。喜んで手伝ってください:wordpress.orgのotto。

1
Otto