WordPressの記事や設定を、ブラウザを開かずに操作できるツールがあります。
それが「WP-CLI」です。
このブログの記事は、WP-CLIで投稿しています。
実際に操作しているのはClaude Codeで、自分は内容を確認する役です。
使ってみて分かったことを、基本と一緒にまとめます。
WP-CLIって、何をするもの?
ターミナルからWordPressを操作するツールだよ。管理画面を開かなくても、記事の投稿や設定の確認ができるんだ。
WP-CLIとは?ターミナルからWordPressを操作するツール
WordPressをコマンドで操作するためのツール、それがWP-CLIです。
CLIは「コマンドラインインターフェース」の略で、文字のコマンドで操作する画面のことです。
公式のページには、「The command line for WordPress. No browser required.」とあります。
ブラウザは要らない、という意味。
どんなときに使う?
公式のページでは、次のような操作が紹介されています。
- データベースの書き出し(
wp db export) - URLなどの一括置換(
wp search-replace) - キャッシュの削除(
wp cache flush) - プラグインやテーマの管理、WordPress本体の更新
- ユーザーの作成、記事の一括操作
管理画面でも、多くの操作はできます。
このブログでは、記事の本文、カテゴリ、アイキャッチ、メタ情報の設定を、コマンドで行っています。
手順をコマンドとして残せるので、Claude Codeに同じ作業を頼めます。
インストールと確認
Macなら、Homebrewで入れるのが手軽です。
Homebrewは、Macにソフトを入れるための道具です。
1行で入ります。
brew install wp-cli
Homebrewを使わない場合は、公式の手順でphar(1つにまとまった実行ファイル)をダウンロードして、/usr/local/bin/wpに置く方法もあります。
公式のハンドブックには、PHP 7.2.24以降が必要と書かれています。
入ったかどうかは、wp --infoで確認できます。
OSやPHPのバージョン、WP-CLIのバージョンが表示されます。
バージョンだけなら、wp cli versionです。
本番のサーバーでも、同じように使えるの?
使えるよ。本番のXserverには、SSHでつないで同じコマンドを実行してるんだ。
基本の使い方
書き方は、wpのあとに、操作の対象と動作を続けます。
たとえばwp post listは、記事を表すpostに、一覧表示を表すlistを続けたものです。
記事の一覧が出るだけです。
wp post list
サイト名を確認するなら、こうです。
wp option get blogname
どちらも、読むだけのコマンドです。
WordPressのフォルダ(wp-config.phpがある場所)の中で実行します。
記事の中身を変えるコマンドもあるので、最初は一覧や確認から試すのがおすすめです。
自分はこう使ってます
記事の投稿は、WP-CLIで
このブログの記事は、Claude Codeがwp post createで作っています。
記事の本文はファイルから読み込みます。
カテゴリやアイキャッチ、メタディスクリプションも、同じようにコマンドで設定しています。
ローカル環境で作った記事は、本番にもSSH経由で同じコマンドを実行して作ります。
SSHは、離れたサーバーに安全につなぐための方法です。
ちなみにバージョンは、ローカルが2.12.0、本番のサーバーが2.8.1でした。
環境ごとに違うことがあります。
設定の確認や、トラブルの調査にも
サイト名のオプションを確認したときは、wp option get blognameがCat's Handを返しました。
画面では普通に「Cat’s Hand」と見えていても、DBの中身は違うことがあります。
ローカル環境でWordPressの更新が「別の更新が現在進行中です」で止まったときも、WP-CLIを使いました。
更新中かどうかを記録しているオプション(WordPress内の設定値)を、wp option deleteで削除して直しました。
コマンドが成功したのに、変わってないことってあるの?
あるよ。「Success」って出たのに、未分類のカテゴリが外れてなかったことがあるんだ。
WP-CLIでハマった例
コマンドで操作できる一方、成功と表示されても、思った結果になっていないことがありました。
- カテゴリの番号を渡したら、渡した値がスラッグ扱いになって、「11」という名前のカテゴリが作られた:うっかり「11」という名前のカテゴリを作ってしまった話
- 同じ原因で、未分類を外すコマンドが「Success」を返したのに、外れなかった:wp post term removeが「Success」なのに、未分類が外れなかった理由
- 予約投稿の日時を変えたら、公開時刻の判定に使うGMT側の日時が古いまま残った:WordPressの予約投稿が失敗する原因。WP-CLIで日付を変えたらpost_date_gmtがずれていた
- シリアライズ済みの文字列をそのまま渡したら、二重にシリアライズされた:related_articlesが文字列を返す、犯人はwp-cliの二重シリアライズだった
迷ったときの確認ポイント
- 書き込みや削除をする前に、対象の記事が合っているか一覧で確認する
- 「Success」と出ても、実行後に一覧や設定を見て、思った結果になっているか確認する
- カテゴリを付け外しする
wp post termに数字を渡すと、IDではなくスラッグとして扱われる。IDで指定するときは--by=idを付ける - 複雑なPHPを実行するときは、
wp evalで直接書かず、ファイルにしてwp eval-fileで実行する
最初は、一覧や確認のコマンドから試してみてください。
書き込み系は、結果を見る一手間まで含めて、1セットです。