WordPress管理に特化して設計された堅牢なコマンドラインインターフェースであるWP-CLIは、WordPress開発者により作成され、長年にわたって維持されています。作業を効率化してくれるため、特にWordPressマルチサイトの管理に適しています。

WP-CLIを効果的に使用するには、WordPressの主要な構成要素である管理画面ファイル構造データベースの基礎知識が必要不可欠。

WP-CLIは、プラグインやテーマのインストール、更新、有効化、無効化、削除などの一般的なコマンドはもちろん、その機能はWordPress管理画面よりもはるかに優れており、高度なサイト管理に非常に汎用性が高いのが特徴です。

今回は、WP-CLIを使ってWordPressマルチサイトを効率的に管理する方法を実例とともにご紹介します。

WP-CLIとは

WP-CLIは、コマンドライン経由でWordPressサイトを管理するための強力なツールです。マルチサイトでは特に管理が簡素化され、一括操作でワークフローを効率化することができます。

WP-CLIの真の強みは、その柔軟性と拡張性にあります。GitHubなどのリポジトリで使用可能なさまざまなWP-CLI パッケージで機能を拡張しつつ、マルチサイト全体または特定のサイトを対象に簡単にコマンドを実行可能です。

開発者は、繰り返しのタスクを簡素化するためにカスタムWP-CLIコマンドを作成することができます。例えば、テーマやプラグインの基本的なコード(ボイラープレートコード)を自動生成できるため、開発の時間と労力が削減されます。

Kinstaでは、WP-CLIを組み込みでサポートしており、SSH経由でアクセスできるため、WordPressサイト管理の負担が軽減されます。ローカル開発には、devkinsta_fpmコンテナを通してDevKinstaでも利用可能です。コンテナ内からサイトフォルダに移動して、コマンドを実行できます。ちょっとした設定は必要になりますが、ローカルWordPressサイトでのデバッグ、テスト、デプロイが効率化されます。

はじめに

今回ご紹介するコマンドは、WordPressマルチサイトを扱う開発者や管理者にとって有益なものに厳選しています。

WP-CLIは広範かつ非常に柔軟であり、すべてのコマンドを取り上げることはできないため、わかりやすく実用的なものを中心にご紹介します。

また、WP-CLIはUnixのコマンドがベースになっていますが、Unixに存在するコマンドに相当するものがない場合があります。

WP-CLIに関する注意事項

WP-CLIのコマンド構造は柔軟で、同じ結果を得るための方法は複数あります。例えば、以下ははいずれも有効です。

wp user create taroyamada [email protected] --display_name="山田太郎" --nickname="Johnny"
wp user create taroyamada --display_name="山田太郎" [email protected] --nickname="Johnny"

コマンドとサブコマンドが記述されていれば、フラグ、パラメータ、値の順序は重要ではありません。

WP-CLIコマンド実行のベストプラクティス

潜在的なエラーを避けるため、以下のベストプラクティスに従ってください。

  • サイトを恒久的に変更するコマンドを実行する際は、必ずサイトのバックアップを作成する。
  • できる限りステージング環境を使用する(Kinstaでは、各サイトごとにステージング環境が無料で付属し、本番環境に変更内容を簡単に反映することができます)。
  • --dry-runフラグを使用して、データベースの変更を適用する前にテストする。

WordPressマルチサイト管理向け必須WP-CLIコマンド

マルチサイトのWP-CLIコマンドは、異なるレベルで操作を実行することができます。

マルチサイト全体─マルチサイト内のすべてのサイトに適用されるコマンド。以下のコマンドは、すべてのサイトですべてのプラグインを無効にします。

wp plugin deactivate --network --all

プライマリサイト─マルチサイトの設定に作成された親サイトに適用されるコマンド。以下のコマンドは、プライマリサイトのみにインストールされているすべてのプラグインをリストアップします。

wp plugin list

セカンダリサイト─URLで指定したマルチサイト内の個々のサイトを対象とするコマンド。以下のコマンドは、サイト(mysite.example.com)のakismetプラグインを更新します。

wp plugin update --url=mysite.example.com akismet

以下、わかりやすいようWP-CLIコマンドをカテゴリに分けてご紹介します。

基本コマンド

以下の基本コマンドは、トラブルシューティングやマルチサイト全体のプラグインやテーマ管理に便利です。

リストの取得

プラグインやその他のコンポーネントの一覧を簡単に取得することができます。

・マルチサイト全体のすべてのプラグインの一覧を取得する

wp plugin list --network

結果:マルチサイト全体でインストールしているすべてのプラグインの情報(プラグイン名、ステータス、利用可能な更新の有無、バージョンなど)が一覧表示されます。

 

・プラグインをステータス(有効化されているなど)で絞り込む

wp plugin list --network --status=active

結果:マルチサイト上の有効なプラグインの一覧が表示されます。

 

・プライマリサイトからプラグインの一覧を取得

wp plugin list

結果:プライマリサイトのプラグインの一覧が表示されます。

 

・特定のサイトで有効なプラグインの一覧を取得

wp plugin list --url=<site-url> --status=active

入力例

wp plugin list --url=blog.example.com --status=active

結果:サイト(blog.example.com)の有効なプラグインの一覧が表示されます。

status=activeに以外にも、以下のフィルターを使用できます。

  • inactive:インストールされているが有効でないプラグイン
  • active-network:マルチサイト全体で有効なプラグイン
  • must-use:自動的に読み込まれる必須プラグイン

 

プラグインの無効化

プラグインの無効化は、エラーのトラブルシューティングや更新準備の際に必要になることがあります。マルチサイト全体または特定のサイトのプラグインを無効にすることができます。

・マルチサイト全体のすべてのプラグインを無効化

wp plugin deactivate --network --all

結果:マルチサイト上のすべてのプラグインが無効になります。

 

・単一サイトの特定のプラグインを無効化

wp plugin deactivate <plugin-slug-1> <plugin-slug-2> --url=<site-url>

入力例

wp plugin deactivate akismet hello-dolly --url=blog.example.com

結果:サイト(blog.example.com)のakismethello-dollyプラグインが無効になります。

プラグインの有効化

マルチサイト全体または特定のサイトのプラグインを有効にすることができます。

・マルチサイト全体のすべてのプラグインを有効化

wp plugin activate --network --all

結果:マルチサイト上のすべてのプラグインが有効になります。

プラグインのインストール

WP-CLIを使用すると、プラグインのインストールを効率化することができます。一度インストールしたプラグインは、個々のサイトまたはマルチサイト全体で有効化可能です。

・マルチサイト全体にプラグインをインストール

wp plugin install <plugin-slug>

入力例

wp plugin install akismet

結果akismetプラグインがインストールされ、有効化することができます。

プラグインの更新

プラグインを定期的に更新することで、マルチサイト全体または特定のサイトのプラグインを最新の状態に保つことができます。

・マルチサイト上のすべてのプラグインを更新

wp plugin update --network --all

結果:マルチサイト上のすべてのプラグインが更新されます。

 

・マルチサイト上の特定のプラグインを更新

wp plugin update <plugin-slug-1> <plugin-slug-2> --network

入力例

wp plugin update akismet jetpack bbpress --network

結果akismetjetpackbbpressプラグインが更新されます。

プラグインの削除

プラグインの削除もWP-CLIを使えばより簡単になります。

・現在のWordPressのコンテキストに応じて、マルチサイト全体または特定のサイトからプラグインを削除

wp plugin delete <plugin-slug>

入力例

wp plugin delete bbpress

結果bbpressプラグインが削除されます。

 

・マルチサイト上の特定のサイトのプラグインを削除

wp plugin delete <plugin-slug> --url=<site-url>

入力例

wp plugin delete bbpress --url=blog.example.com

結果:サイト(blog.example.com)からbbpressプラグインが削除されます。

サイト管理

WordPressマルチサイト内の各サイトの管理は、非常に重要なタスクです。以下サイトの作成、管理、削除、そしてキャッシュ処理を効率的に実行するための一般的なコマンドをご紹介します。

サイトの作成

新規サイトにマルチサイトに追加するのも、WP-CLIを使えば簡単です。

基本コマンド─ 一意のスラッグを指定して新規サイトを作成

wp site create --slug=<site-name>

入力例

wp site create --slug=blog

結果:新規サイト(blog.example.com またはexample.com/blog)が作成され、自動的に有効化されます。

 

高度なコマンド─コマンドにフラグを追加することも可能。以下は、サイトタイトルと管理者を指定してサイトを追加する例です。

wp site create --slug=<site-name> --title="<site-title>" --email=<admin-email>

入力例

wp site create --slug=blog --title="ブログサイト" [email protected]

結果:「ブログサイト」というタイトルのサイトが[email protected]を管理者として作成されます。

 

・サイトID、URL、作成日、最終更新日を含むテーブルを取得して、すべてのサイトをリストアップ

wp site list

・サイト一覧を絞り込んで、マルチサイト上のすべてのサイトのURLだけを取得

wp site list --field=url

結果:各サイトのURLの一覧が表示されます。

サイトのリセット(空白化)と削除

・プライマリサイトを空にする

wp site empty

結果:プライマリサイトのすべてのコンテンツを削除するための確認プロンプトが表示されます。

 

・特定のサイトを空にする(すべての投稿、固定ページ、リンク、タクソノミーを削除)

wp site empty --url=<site-url>

入力例

wp site empty --url=blog.example.com

結果:サイト(blog.example.com)のコンテンツがすべて削除されます。

 

・マルチサイト上のすべてのサイトを空にする

wp site list --field=url | xargs -n1 -I % wp site empty --url=% --yes

結果:すべてのURLのループを開始し、各サイトのコンテンツを空にします。

 

・IDで特定のサイトを削除

wp site delete <site-id>

入力例

wp site delete 5

結果:ID 5のサイトが削除されます。

 

・確認をスキップして複数のサイトを削除

wp site delete 2 --yes
wp site delete 3 --yes

結果:ID 2および3のサイトが削除されまする(--yesフラグが確認プロンプトをスキップします)

キャッシュのクリア

以下の例では、多くのキャッシュタイプが異なる方法で保存されるため、KinstaのMU(Must-Use)プラグインを使用しています。これは、KinstaでホスティングされるすべてのWordPressサイトに自動インストールされます。

サイトキャッシュ、エッジキャッシュ、CDNキャッシュ、Redisキャッシュを含むすべてのキャッシュをクリアすることができます。

・すべてのキャッシュ(サイト、エッジ、CDN、Redis)をクリア

wp kinsta cache purge --all

・サイトキャッシュのみをクリア

wp kinsta cache purge --site

・CDNキャッシュをクリア

wp kinsta cache purge --cdn

・オブジェクトキャッシュをクリア

wp cache purge

 

ユーザー管理

WP-CLIを使用すると、マルチサイトのユーザー管理も簡素化されます。以下、ユーザー管理にまつわる主な操作を見ていきます。

ユーザーのリストアップ

マルチサイト全体または特定のサイトのユーザーを簡単にリストアップできます。

・マルチサイト上のすべてのユーザーの一覧を取得

wp user list --network

結果:各ユーザーまたはユーザー一覧のクエリに対して、ユーザーID、ログイン、表示名、ユーザー名、登録日、役割を示す一覧が表示されます。

 

・プライマリサイトのユーザーの一覧を取得

wp user list

結果:プライマリサイトのユーザーが一覧表示されます。

 

・単一サイト(セカンダリサイト)のユーザーの一覧を取得

wp user list --blog_id=<id>
wp user list --url=<url>

入力例

wp user list --blog_id=6

結果:ブログID 6のサイトのユーザーが一覧表示されます。

ユーザーの作成

マルチサイトでは、ユーザーはデフォルトでマルチサイト全体に登録されます。ユーザーの役割は、サイトに追加された最初のユーザーか、それ以降のユーザーかによって異なります。またユーザー名は4文字以上でなければなりません。

・プライマリサイトに新規ユーザーを追加

wp user create <username> <email>

入力例

wp user create taroyamada  [email protected]

結果:生成されたパスワードを含む追加完了のメッセージが表示されます。

 

・指定された権限を持つ新規ユーザーを特定のサイトに追加

wp user create <username> <email> --role=<role> --url=<url>

入力例

wp user create kentasato [email protected] --role=editor --url=blog.example.com

結果:サイト(blog.example.com)にユーザーkentasatoが「編集者」として追加されます。

 

・作成時にユーザーアカウントメタを追加

wp user create <username> <email> --display_name=<name> --nickname=<nickname>

入力例

wp user create taroyamada [email protected] --display_name="山田太郎" --nickname="タロウ"

結果:表示名taroyamadaとニックネームタロウでユーザー山田太郎が追加されます。

ユーザーの更新

権限やパスワードのようなユーザー情報の更新も、WP-CLIを使うことで効率化されます。

・ユーザーの権限を変更

wp user update <username|email|user_id> --role=<role>

入力例

wp user update taroyamada kentasato adminuser --role=super-administrator

結果:ユーザーtaroyamada 、kentasatoadminuserが特権管理者に昇格します。

 

・ユーザーのパスワードをリセットまたは変更

wp user update <username> --user_pass=<new_password>

入力例

wp user update taroyamada --user_pass=securePassword2024

結果taroyamadaのパスワードが更新されます。

 

WP-CLIでは、複数の操作を1つのコマンドにまとめることができます。例えば、ユーザーのパスワードと権限を同時に更新することも可能です。

wp user update <user> --user_pass=<new_password> --role=<status>

入力例

wp user update taroyamada --user_pass="newPassword2024" --role=editor

結果:ユーザーtaroyamadaのパスワードがnewPassword2024に、権限は「編集者」に変更されます。

ユーザーのメタデータ管理

以下のコマンドで、ユーザーアカウントのメタデータを追加、取得、削除することができます。

・ユーザーメタデータを取得

wp user meta get <username> <meta_key>

入力例

wp user meta get taroyamada nickname

結果:ユーザーtaroyamadanicknameメタキーの値が表示されます。

 

・ユーザーメタデータを追加

wp user meta add <username> <meta_key> <meta_value>

入力例

wp user meta add taroyamada display_name "山田太郎さん"

結果:ユーザーtaroyamadaの表示名が山田太郎さんに設定されます。

 

・ユーザーメタデータを削除

wp user meta delete <username> <meta_key>

入力例

wp user meta delete taroyamada display_name

結果:ユーザーtaroyamadadisplay_nameメタキーの値が削除されます。

ユーザーの削除

マルチサイトや特定のサイトからユーザーを削除するのも、WP-CLIを使うと効率的です。

・マルチサイト上からユーザーを削除

wp user delete <username|user_id> --network

入力例

wp user delete taroyamada --network

結果:ユーザーtaroyamadaがマルチサイトから削除されます。

 

・特定のサイトからユーザーを削除

wp user delete <username|user_id> --url=<site-url>

入力例

wp user delete taroyamada --url=mysite.example.com

結果:サイト(mysite.example.com)からユーザーtaroyamadaが削除されます。

データベース管理

WP-CLIは、phpMyAdminのようなデータベース管理ツールの強力な代替手段にもなります。以下、一般的なデータベース管理にまつわる操作をご紹介します。

データベースのエクスポート

データベースをSQLファイルとしてエクスポートすることができます。エクスポートされたファイルは、WordPressのルートディレクトリに保存されます。

wp db export

結果:ルートディレクトリにSQLファイルが生成されます。

 

エクスポートされたファイルの名前を変更したい場合は、以下のコマンドを使用します。

wp eval 'if ( rename( "unganglyfilename.sql", "newfilename.sql" ) ) { echo "File renamed successfully."; } else { echo "Failed to rename file."; }'

入力例

wp eval 'if ( rename( "cilawawugo4504_gTr4kSXUsmJ9FNauVnPb-2024-11-17-9545b3f.sql", "network-db.sql" ) ) { echo "File renamed successfully."; } else { echo "Failed to rename file."; }'

結果:ファイル名cilawaw…nPb--9545b3f.sqlnetwork-db.sqlに変更されます。

データベースのダウンロード

エクスポートしたデータベースファイルをローカルマシンにダウンロードするには、curlコマンドを使用します。

curl <remote-url> -o <local-path>

入力例

curl example.com/network-db.sql -o ~/Downloads/network-db.sql

結果network-db.sqlファイルがローカルのDownloadsディレクトリにダウンロードされます。

データベースのアップロード

scpコマンドを使用して、マルチサイトのルートディレクトリにデータベースファイルをアップロードできます。

scp <local-path-to-file> <username>@<remote-server>:<remote-path>

入力例

scp ~/Downloads/network-db.sql [email protected]:/var/www/example.com/public_html

結果:認証後、network-db.sqlファイルがルートディレクトリにアップロードされます。

データベースのインポート

データベースをインポートする前に、既存のデータテーブルをリセットする必要があるかもしれません。

・データテーブルをリセット

wp db reset

結果:データベース内のすべてのデータテーブルが空になります。

 

・データベースをインポート

wp db import <file-name.sql>

入力例

wp db import network-db.sql

結果network-db.sql ファイルが、空のデータテーブルにデータを挿入します。

 

・インポートしたSQLファイルを削除(セキュリティ上の理由から、インポート後はSQLファイルを削除する)

rm <file-name.sql>

 

実践例

ワークフローを効率化し、簡素化するコマンドは多数あります。最後に、3つの実例をご紹介します。複雑なものもありますが、基本的なコマンドを組み合わせて便利な操作を行えるようになっています。

プラグインのインストールと有効化とサムネイルの再生を同時に実行

マルチサイト内のすべてのサイトをループし、2つのプラグインをインストールして有効化して、各サイトの画像のサムネイルを再生成します。

wp site list --field=url | xargs -n1 -I % sh -c 'wp plugin activate <plugin slug> <plugin slug> --url=% && wp media regenerate --url=%'

入力例

wp site list --field=url | xargs -n1 -I % sh -c 'wp plugin install akismet bbpress --activate --url=% && wp media regenerate --url=%'

結果AkismetBBPressプラグインがすべてのサイトにインストールされ有効化され、画像のサムネイルが再生成されます。

すべてのユーザーにカスタムメタフィールドを追加

すべてのサイトをループし、ユーザーのリストを取得して、各ユーザーにカスタムメタフィールドを追加します。

wp site list --field=url | xargs -n1 -I % sh -c 'wp user list --fields=ID --url=% --format=csv | tail -n +2 | xargs -n1 -I {} wp user meta add {} <meta-key> <meta-value> --url=%'

入力例

wp site list --field=url | xargs -n1 -I % sh -c 'wp user list --fields=ID --url=% --format=csv | tail -n +2 | xargs -n1 -I {} wp user meta add {} favorite_color "" --url=%'

結果:カスタムメタフィールドfavorite_colorが、すべてのサイトのすべてのユーザーに追加されます。

favorite_colorフィールドを表示するには、functions.phpファイルを使用するか、カスタムプラグインを作成する必要があります。

シングルサイトをマルチサイトに変換

WP-CLIを使用すると、標準的なWordPressサイトを簡単にマルチサイトに変換することもできます。

wp core multisite-convert

結果:シングルサイトがマルチサイトに変換されます。

なお、マルチサイトに変換する際は、すべてのプラグインを無効にしてください。

サイトを変換した後は、wp-config.phpファイルでマルチサイトのURLを設定します。サブドメイン(例:site.example.com)かサブディレクトリ(例:example.com/site)のいずれかを選択可能です。また、URL書き換えルール(Apacheのmod_rewriteモジュールによって処理)を手動で更新し、パーマリンクとサイト構造が正しく機能するようにする必要がある場合もあるため、.htaccessファイルを確認してください。

まとめ

今回は、WordPress マルチサイト管理に役立つWP-CLIをご紹介しました。WP-CLIは、効率性ときめ細かな制御を求める開発者と管理者にとって不可欠なツールです。プラグイン、ユーザー、データベースの操作から、単一サイトをマルチサイトに変換するような高度な操作まで、複雑なタスクを正確かつ迅速に簡素化します。

Kinstaでは、WordPressマルチサイトの管理をシームレスにする拡張可能なWP-CLIツールをサポートしています。WP-CLIは、本番環境、ステージング環境、さらにはDevKinstaを利用したローカル開発環境においても、ワークフローを効率化するのに便利です。

Bud Kraus

Bud Kraus has been working with WordPress as an in-class and online instructor, site developer, and content creator since 2009. He has produced instructional videos and written many articles for WordPress businesses.