
前から便利そうと気になっていた、WP-CLIを入れたい。ついでにWordPressへの自動投稿も!

この記事では、SSHで接続できるサーバーにWP-CLIを導入し、WordPressのクラシックエディタ向けにSSH経由で下書き投稿を作成できる状態まで確認する手順をまとめます。
実際のホスト名、ユーザー名、ドメイン、WordPress配置パスは環境ごとに異なるため、ここではすべてダミー値で記載します。
想定する構成
- SSH接続先:
wordpress-host - SSHユーザー:
example_user - WordPress設置先:
/home/example_site/public_html - WP-CLI配置先:
/home/example_user/bin/wp - 投稿作成時の実行ユーザー: 通常はSSHユーザー、メディア操作など権限が必要な場合はWebサーバーユーザー
- 投稿形式: WordPressクラシックエディタ向けHTML
クラシックエディタ向けの記事本文は、MarkdownではなくHTMLとして用意しておくと扱いやすくなります。見出しは <h2> や <h3>、箇条書きは <ul> / <li>、コード例は <pre><code> を使う形にしておくと、WP-CLIから下書き投稿を作るときも安定します。
1. WP-CLIを配置するディレクトリを用意する
まず、SSHユーザーのホーム配下にコマンド配置用のディレクトリを作成します。
ssh wordpress-host
mkdir -p /home/example_user/bin
以後の作業は、特に断りがなければSSH接続先サーバー上で実行します。
2. WP-CLIのpharをダウンロードする
WP-CLI公式のpharを取得して、実行ファイルとして配置します。
curl -L https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
-o /home/example_user/bin/wp
chmod +x /home/example_user/bin/wp
配置後、バージョンが表示されることを確認します。
/home/example_user/bin/wp --version
PATHに /home/example_user/bin が入っていれば、以後は wp だけで実行できます。
wp --version
3. WordPressの設置先を確認する
WP-CLIはWordPressのルートディレクトリを指定して実行できます。対象ディレクトリに wp-config.php や wp-load.php があることを確認します。
ls -l /home/example_site/public_html/wp-config.php
ls -l /home/example_site/public_html/wp-load.php
WordPress本体を認識できるか確認します。
wp --path=/home/example_site/public_html core version
テーマやプラグインがCLI実行時に警告を出す環境では、可能な範囲で --skip-themes を付けて実行すると安定します。
wp --path=/home/example_site/public_html --skip-themes core version
4. 読み取り系コマンドで動作確認する
いきなり投稿を作成する前に、読み取り系コマンドでWordPressへ接続できることを確認します。
wp --path=/home/example_site/public_html --skip-themes user list
wp --path=/home/example_site/public_html --skip-themes post list --post_type=post --posts_per_page=5
ここでPHP warningが出る場合でも、コマンド結果が表示されていればWP-CLI自体は動作していることがあります。ただし、自動化に使う場合は警告の原因を把握し、必要に応じて --skip-themes や --skip-plugins を検討します。
5. クラシックエディタ用HTMLを用意する
投稿本文はHTMLファイルとして作成します。クラシックエディタ向けなら、本文の先頭は <h2> から始めると、既存ブログの構成に合わせやすくなります。
<h2>テスト投稿の見出し</h2>
<p>これはWP-CLIから下書き投稿を作成する確認用の記事です。</p>
<h3>確認したいこと</h3>
<ul>
<li>HTML本文がそのまま本文として入ること</li>
<li>投稿ステータスが下書きになること</li>
<li>投稿者やカテゴリーを指定できること</li>
</ul>
ローカルで作ったHTMLをサーバーに転送する場合は、たとえば次のようにします。
scp ./sample-classic-editor-post.html wordpress-host:/tmp/sample-classic-editor-post.html
6. 下書き投稿を作成する
HTMLファイルを本文として読み込み、下書き投稿を作成します。クラシックエディタ向けの場合、本文はブロックコメントを含めない通常のHTMLで問題ありません。
wp --path=/home/example_site/public_html --skip-themes post create \
/tmp/sample-classic-editor-post.html \
--post_title='WP-CLI下書き投稿テスト' \
--post_status=draft \
--post_author=1 \
--porcelain
--porcelain を付けると、成功時に投稿IDだけが出力されます。自動化スクリプトではこのIDを後続処理に使えます。
7. 投稿状態を確認する
作成された投稿IDを使い、ステータスが draft になっているか確認します。
POST_ID=12345
wp --path=/home/example_site/public_html --skip-themes post get "$POST_ID" \
--fields=ID,post_title,post_status,post_author,post_date
下書き作成の自動化では、作成後に必ず post_status を確認しておくと安全です。
wp --path=/home/example_site/public_html --skip-themes post get "$POST_ID" --field=post_status
8. カテゴリーやタグを指定する
カテゴリーIDが分かっている場合は、投稿作成時に --post_category を指定できます。
wp --path=/home/example_site/public_html --skip-themes post create \
/tmp/sample-classic-editor-post.html \
--post_title='カテゴリー付き下書き投稿テスト' \
--post_status=draft \
--post_author=1 \
--post_category=10 \
--porcelain
タグは投稿作成後に付与できます。
wp --path=/home/example_site/public_html --skip-themes post term set "$POST_ID" post_tag \
'WP-CLI' 'WordPress運用' '自動化'
9. メディア操作は権限に注意する
画像をメディアライブラリへ取り込む場合、アップロードディレクトリの所有者や権限に注意します。Webサーバーユーザーで書き込む必要がある環境では、管理者権限でWebサーバーユーザーとしてWP-CLIを実行します。
sudo -u webserver-user wp --path=/home/example_site/public_html --skip-themes media import \
/tmp/sample-featured-image.png \
--porcelain
取得した添付ファイルIDをアイキャッチ画像として設定します。
ATTACHMENT_ID=67890
sudo -u webserver-user wp --path=/home/example_site/public_html --skip-themes post meta update \
"$POST_ID" _thumbnail_id "$ATTACHMENT_ID"
設定後は、投稿ステータスとアイキャッチ画像IDを確認します。
wp --path=/home/example_site/public_html --skip-themes post get "$POST_ID" --field=post_status
wp --path=/home/example_site/public_html --skip-themes post meta get "$POST_ID" _thumbnail_id
10. 自動化で使うときの注意点
- 本番投稿ではなく、まず
--post_status=draftで下書き作成に限定する - 作成後に
post_statusがdraftであることを必ず確認する - テーマ由来の警告を避けるため、可能なら
--skip-themesを付ける - プラグイン由来の副作用がある場合は、必要に応じて
--skip-pluginsを検討する - メディア取り込みはアップロードディレクトリの権限に合わせて実行ユーザーを選ぶ
- クラシックエディタ向け本文では、MarkdownではなくHTMLとして保存する
- 自動化スクリプトでは、投稿ID、ステータス、アイキャッチ画像IDなどをログに残す
最小コマンド例
下書き投稿だけを作る最小形は次の通りです。
wp --path=/home/example_site/public_html --skip-themes post create \
/tmp/article.html \
--post_title='記事タイトル' \
--post_status=draft \
--post_author=1 \
--porcelain
この形を基本にして、カテゴリー、タグ、アイキャッチ画像、投稿後の検証を追加していくと、クラシックエディタ用のWordPress下書き作成を安全に自動化できます。

