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
)のakismet
とhello-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
結果:akismet
、jetpack
、bbpress
プラグインが更新されます。
プラグインの削除
プラグインの削除も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
、kentasato
、adminuser
が特権管理者に昇格します。
・ユーザーのパスワードをリセットまたは変更
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
結果:ユーザーtaroyamada
のnickname
メタキーの値が表示されます。
・ユーザーメタデータを追加
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
結果:ユーザーtaroyamada
のdisplay_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.sql
がnetwork-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=%'
結果:Akismet
とBBPress
プラグインがすべてのサイトにインストールされ有効化され、画像のサムネイルが再生成されます。
すべてのユーザーにカスタムメタフィールドを追加
すべてのサイトをループし、ユーザーのリストを取得して、各ユーザーにカスタムメタフィールドを追加します。
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を利用したローカル開発環境においても、ワークフローを効率化するのに便利です。
コメントを残す