WordPressマルチサイトのネットワークをサブドメイン形式で構築

マルチサイト設定をすると、1つのWordPressインストールでメインドメインとサブドメインの両方を管理できます。
設定方法をまとめました。

サブドメインが正しく表示されるか確認

まずブラウザでサブドメインにアクセスし、WordPressの画面が表示されるかをチェックします。
もし404エラーやサーバーが見つからないと表示される場合は、DNSやサーバーの設定を再確認する必要があります。

「This is a placeholder for the subdomain」と表示される場合、サブドメインにWordPressが正しく紐づいていないか、サーバー設定で初期の仮ページが表示されている可能性があります。

WordPressのマルチサイト機能を利用する際は、同じルートフォルダ(例:public_html)で運用する必要があります。サブドメインをpublic_htmlの下に配置するのではなく、WordPress本体と同じ場所に配置します。

/domains/subdomain.example.com/public_html/ (←これじゃなくて)
public_html/(=WordPress本体と同じ場所に置きます)

WordPressのマルチサイト機能を有効にする

次に、WordPressでマルチサイトを有効にするために設定を変更します。
まず、サーバー上のwp-config.phpファイルを開き、特定のコードを追加します。
その後、ファイルを保存し、WordPressの管理画面にログインします。

  1. WordPressがインストールされているサーバーのwp-config.phpファイルを開く
  2. /* That’s all, stop editing! Happy blogging. */ の上に以下のコードを追加
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'example.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

/* That’s all, stop editing! Happy blogging. */がない場合

通常、wp-config.phpには既存の設定が記述されています。
define('...')の形式で書かれたコードが並んでいる箇所です。そのリストの中に追加します。

最後の部分にあるrequire_onceより前に追加。

ここに追加

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

ファイルを保存して、WordPressの管理画面にログインします。

マルチサイトのインストールを設定

ログイン後、ツール > ネットワークの設定オプションが表示され、マルチサイトの設定を進められます。
ネットワークの設定で「サブドメイン」を選び、WordPressの指示に従ってwp-config.phpと.htaccessのコードを更新します。.htaccessには、マルチサイト用のルールを追加する必要があります。

.htaccessの# BEGIN WordPress 〜 # END WordPress にマルチサイト用ルールをコピペ

サブドメインをネットワークに追加

マルチサイトが設定できたら、ネットワーク管理 > サイト > 新規追加からサブドメインを追加し、必要な情報を入力してサブドメインサイトを作成します。

これにより、メインドメインとサブドメインの両方で同じテーマやプラグインを共有できます。
管理画面からテーマやプラグインをインストールし、どちらのサイトにも適用可能です。

サブドメインからメインドメインの記事読み込み

サブドメイン型のマルチサイトでは、各サイトが独立した存在として扱われます。
それぞれが別々のデータベーステーブルを持っているため、サブドメイン内でメインサイトの投稿を自動的に取得することはできません。
しかし、サブドメインのテーマファイルに特定のコードを追加することで、メインブログから最新の投稿を取得し、サブドメイン上で表示することが可能です。

<?php
// メインブログの投稿を取得
$args = array(
    'post_type' => 'post',  // 投稿タイプ
    'posts_per_page' => 5,  // 最新5件の記事を取得
    'blog_id' => 1,         // メインサイトのID(通常1)
);
$the_query = new WP_Query($args);

// 取得した投稿を表示
if ($the_query->have_posts()) :
    while ($the_query->have_posts()) : $the_query->the_post();
        // 投稿タイトルとリンクを表示
        echo '<h2><a href="' . get_permalink() . '">' . get_the_title() . '</a></h2>';
    endwhile;
else :
    echo '記事がありません';
endif;

// リセット
wp_reset_postdata();
?>

この際、メインブログのIDがデフォルトの「1」でない場合は、コード内のswitch_to_blog(1);の「1」を実際のIDに変更する必要があります。

コメントを残す

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください