2026年7月24日
2026年7月24日
WP-CLIのsiteコマンドでWordPressマルチサイトを管理する方法
WordPressマルチサイトの子サイトは、管理画面を開かなくても WP-CLI の wp site コマンドで一覧・作成・停止・削除まで操作できます。さらにグローバル引数 --url= を付ければ、プラグインやオプションの操作を特定の子サイトに向けられます。この記事では、サイト単位の基本操作から、全サイトへの一括実行、マルチサイト化やネットワーク管理者の設定までを順に説明します。
前提と作業前の準備
ここで紹介するコマンドは WP-CLI 2系を前提にしています(2026年10月現在)。オプションの細部はバージョンで変わることがあるため、迷ったときは wp help site create のように各サブコマンドのヘルプで確かめてください。
マルチサイトでは、ひとつのデータベースに全サイトのテーブル(wp_2_posts のようにサイトIDが付いたもの)が並んでいます。削除や置換を誤ると複数のサイトに影響が広がるため、変更系の操作の前にはデータベースを書き出しておきます。
# WordPress のディレクトリで実行(ネットワーク全体のテーブルが含まれる)
wp db export ~/backup/network-$(date +%Y%m%d-%H%M).sql
本番で初めて試すコマンドは、ステージング環境で動きを確認してから使うのが安全です。
wp site list で子サイトを確認する
最初に、ネットワーク内にどのサイトがあるかを確認します。
# 一覧(ID・URL・最終更新日などが表で出る)
wp site list
# 必要な列だけに絞る
wp site list --fields=blog_id,url
# URL だけを1行ずつ出す(後でループに使う)
wp site list --field=url
# CSV で書き出して台帳にする
wp site list --fields=blog_id,url,archived,spam --format=csv > sites.csv
--field(単数)は1列の値だけを出力し、--fields(複数)は表示する列を指定します。この違いを取り違えると、後で紹介するループ処理が想定どおりに動かないので注意してください。blog_id は他のサブコマンドでサイトを指定するときに使う番号です。
子サイトを作成・停止・削除する
作成:wp site create
wp site create --slug=shop --title="オンラインショップ" --email=admin@example.com
--slug はサブディレクトリ型なら example.com/shop/、サブドメイン型なら shop.example.com の部分になります。--email に既存ユーザーのメールアドレスを指定するとそのユーザーが管理者になり、存在しなければ新しいユーザーが作られます。
スクリプトの中で作成直後のサイトIDを使いたい場合は --porcelain を付けると、IDだけが出力されます。
NEW_ID=$(wp site create --slug=campaign --title="キャンペーン" --porcelain)
echo "作成したサイトID: ${NEW_ID}"
一時的に止める:archive / deactivate / spam
サイトを消さずに公開を止める方法はいくつかあり、目的によって使い分けます。
wp site archive 5 # アーカイブ(公開停止)
wp site unarchive 5 # 元に戻す
wp site deactivate 5 # 無効化
wp site activate 5 # 有効化
wp site spam 5 # スパム扱い
wp site unspam 5 # 解除
いずれもサイトのフラグを切り替えるだけで、データは残ります。期間限定サイトの終了や、削除前の様子見に使えます。訪問者に表示される画面はフラグごとに異なるため、実際の表示はステージングで確かめておくと安心です。
削除:wp site delete
wp site delete 5
確認のプロンプトが出たうえで、そのサイトのテーブルとアップロードファイルが削除されます。テーブルだけは残したい場合は --keep-tables を付けます。メインサイト(ID 1)は削除できません。削除は元に戻せないため、直前に wp db export を取り、対象IDを wp site list で再確認してから実行してください。--yes で確認を省略できますが、手作業では付けないほうが誤操作を防げます。
--url= で特定の子サイトにコマンドを向ける
wp plugin や wp option などのコマンドは、何も指定しないとメインサイトに対して動きます。子サイトを操作するには、グローバル引数 --url= でサイトのURLを渡します。
# 子サイトのサイト名を確認
wp option get blogname --url=https://example.com/shop/
# 子サイトだけでプラグインを有効化
wp plugin activate woocommerce --url=https://example.com/shop/
# 子サイトの投稿一覧
wp post list --post_type=page --url=https://example.com/shop/
--url= を付け忘れると、意図せずメインサイトの設定を変えてしまうのがよくある失敗です。変更系のコマンドを打つ前に、同じ --url= で wp option get siteurl を実行し、対象が合っているか確かめる習慣をつけると事故を減らせます。
ネットワーク全体に適用する --network
プラグインをネットワーク全体で有効化する場合は --url= ではなく --network を使います。
wp plugin activate akismet --network
wp plugin deactivate akismet --network
# テーマをネットワークで利用可能にする
wp theme enable twentytwentyfive --network
「ネットワーク有効化」と「各サイトで有効化」は管理画面と同じく別の状態です。wp plugin list --url=... の status 列で、どちらの状態になっているかを確認できます。
全サイトに同じコマンドを一括実行する
wp site list --field=url の出力を xargs に渡すと、全サイトに同じコマンドを順番に実行できます。
# 全サイトのサイト名を表示
wp site list --field=url | xargs -I % wp option get blogname --url=%
# 全サイトのキャッシュを削除
wp site list --field=url | xargs -I % wp cache flush --url=%
どのサイトの結果か分かりにくい場合や、途中でエラーが出たサイトを把握したい場合は、シェルのループで書くほうが扱いやすくなります。
for url in $(wp site list --field=url); do
echo "== ${url}"
wp plugin list --status=active --field=name --url="${url}" || echo "失敗: ${url}"
done
アーカイブ済みのサイトを除外したいときは、wp site list --archived=0 --field=url のようにフィールドの値で絞り込めます。変更系のコマンドを一括で流す前に、まず読み取り系のコマンドで対象URLの一覧が正しいかを確認してください。
データベースのURL置換では、wp search-replace は既定で --url= に指定したサイトのテーブルだけを対象にし、--network を付けるとネットワーク全体のテーブルが対象になります。いずれの場合も、先に --dry-run で件数を確かめてから実行します。
マルチサイト化とネットワーク管理者の設定
新規インストール・既存サイトの変換
これからマルチサイトとして構築する場合は wp core multisite-install、既存のシングルサイトを変換する場合は wp core multisite-convert を使います。
# 新規にマルチサイトとしてインストール(サブディレクトリ型)
wp core multisite-install --url=https://example.com --title="ネットワーク" \
--admin_user=netadmin --admin_email=admin@example.com
# 既存のシングルサイトを変換(サブドメイン型にする場合)
wp db export ~/backup/before-convert.sql
wp core multisite-convert --subdomains
サブドメイン型にする場合は --subdomains を付けます。変換後は wp-config.php にマルチサイト用の定数が入っているかを確認し、Webサーバー側のリライト設定(Apache の .htaccess や Nginx の設定)をマルチサイト用に書き換える必要があります。このリライト設定は WP-CLI では自動化されない部分なので、管理画面の「ネットワークの設置」に表示される内容を参考に設定します。
ネットワーク管理者を管理する:wp super-admin
wp super-admin list
wp super-admin add tanaka
wp super-admin remove tanaka
ネットワーク管理者は全サイトの設定やプラグインを変更できる強い権限です。担当者の異動時などは wp super-admin list で棚卸しし、不要になったユーザーは外しておきます。
まとめ
- 子サイトの確認は
wp site list。--field=urlは1列だけ、--fieldsは列の指定と覚えておく - 作成は
wp site create --slug=、停止は archive / deactivate / spam、削除はwp site delete。削除前はwp db exportで書き出す - 子サイト向けのコマンドは
--url=を付ける。ネットワーク全体のプラグイン有効化は--network - 全サイトへの一括実行は
wp site list --field=url | xargs -I % wp ... --url=%。先に読み取り系で対象を確認する - マルチサイト化は
wp core multisite-install/multisite-convert。リライト設定は手動で整える