2026年8月10日

2026年8月10日

WP-CLIのpostコマンドの使い方(一覧・取得・作成・更新・削除・メタ)

WP-CLI の wp post コマンドを使うと、管理画面を開かずに投稿や固定ページの一覧表示・作成・更新・削除、カスタムフィールドの操作ができます。特に「条件に合う投稿をまとめて非公開にする」「特定の投稿のメタ情報を確認する」といった作業は、画面で1件ずつ操作するより速く、手順も記録に残せます。この記事では、よく使うサブコマンドと、まとめて変更するときの安全な進め方を説明します。

使う前の準備

WP-CLI がインストールされ、WordPress のフォルダで wp コマンドが動く状態を前提にします。次のコマンドで確認できます。

wp --info
wp core version

WordPress のフォルダ以外で実行する場合は、--path=/var/www/example.com/public_html のように場所を指定します。root ユーザーで実行するとエラーで止まり --allow-root が求められるので、Webサーバーと同じユーザー(例:www-data)で実行するのが基本です。ファイルの所有者がずれるのを防ぐ意味もあります。使えるサブコマンドとオプションは wp help post や wp help post list で確認できます。

wp post list で投稿を一覧表示する

まずは対象を確認するための一覧表示です。

# 公開中の投稿をID・タイトル・日付で表示
wp post list --post_type=post --post_status=publish --fields=ID,post_title,post_date

# 固定ページの下書きを表示
wp post list --post_type=page --post_status=draft

# 件数だけ数える
wp post list --post_type=post --post_status=publish --format=count

wp post list には WP_Query の引数を --引数名=値 の形で渡せます。--post_type や --post_status のほか、--author=2、--category_name=news、--posts_per_page=10 なども使えます。条件は思い込みで書かず、指定したときの出力を目で見てから次の操作に進むのが安全です。

出力形式は --format で切り替えます。

  • table:表形式(既定)
  • csv / json / yaml:ほかのツールに渡したり保存したりするとき
  • ids:IDだけを空白区切りで出力。ほかのコマンドに渡すときに便利
  • count:件数だけ

表示する列は --fields で複数、--field で1つだけ指定できます。カスタム投稿タイプも、--post_type=product のように投稿タイプ名を指定すれば同じように扱えます。

wp post get で1件の詳細を見る

# 投稿ID 123 の主な情報
wp post get 123

# タイトルだけ取り出す
wp post get 123 --field=post_title

# JSONで保存しておく
wp post get 123 --format=json > post-123.json

更新や削除の前に wp post get で現在の内容を保存しておくと、間違えたときに元の値を確認できます。存在確認だけなら wp post exists 123 も使えます。

wp post create で投稿を作る

# 下書きの投稿を作成し、作成されたIDだけを表示
wp post create --post_type=post --post_title='お知らせ' --post_content='本文です。' --post_status=draft --porcelain

# 本文をファイルから読み込んで固定ページを作成
wp post create ./about.html --post_type=page --post_title='会社概要' --post_status=draft

--porcelain を付けると、メッセージではなく作成された投稿IDだけが出力されるので、シェルスクリプトで続けて処理するときに使えます。本文が長い場合や HTML を含む場合は、コマンドラインに直接書くより、ファイルを引数に渡すほうがクォートの扱いで失敗しにくくなります。

作成直後は --post_status=draft にしておき、管理画面のプレビューで見た目を確認してから公開すると安心です。カテゴリーやタグは、作成後に wp post term set 123 category news のように付けられます(wp help post term で使い方を確認できます)。

wp post update で投稿を更新する

# 投稿ID 123 を公開にする
wp post update 123 --post_status=publish

# タイトルを変更する
wp post update 123 --post_title='新しいタイトル'

# 複数のIDをまとめて下書きに戻す
wp post update 123 124 125 --post_status=draft

指定したフィールドだけが変わり、それ以外はそのまま残ります。wp post update はIDを複数並べられるので、後述の --format=ids と組み合わせるとまとめて変更できます。

wp post delete で投稿を削除する

# ゴミ箱へ移動
wp post delete 123

# ゴミ箱を経由せずに削除(元に戻せない)
wp post delete 123 --force

--force を付けない場合はゴミ箱に移動するだけなので、管理画面から復元できます。--force 付きはゴミ箱を経由せずに削除されるため、事前にバックアップを取ってから使ってください。投稿(post)・固定ページ(page)以外の投稿タイプでは、--force を付けないとエラーになり削除されない場合があります。その場合も、本当に消してよいかを wp post get で確認してから付けます。

wp post meta でカスタムフィールドを扱う

投稿のカスタムフィールド(メタデータ)は wp post meta で操作します。

# 投稿123のメタ情報を一覧表示
wp post meta list 123

# 特定のキーの値を取得
wp post meta get 123 _thumbnail_id

# 値を更新(キーが無ければ追加される)
wp post meta update 123 my_custom_key 'new value'

# キーを削除
wp post meta delete 123 my_custom_key

先頭が _ のキーは、WordPress 本体やプラグインが内部で使っているものが多くあります。_edit_lock や、プラグイン独自の設定値を不用意に書き換えると、表示や動作がおかしくなることがあります。中身が分からないキーは変更しないでください。値が配列などのシリアライズされたデータの場合、wp post meta get 123 key --format=json で中身を読みやすく表示できます。

まとめて変更するときの手順

複数の投稿をまとめて変更・削除するときは、次の順に進めると失敗を減らせます。

# 1. DBをバックアップ
wp db export before-bulk-$(date +%Y%m%d).sql

# 2. 対象を一覧で確認(件数とタイトルを見る)
wp post list --post_type=post --category_name=old-campaign --post_status=publish --fields=ID,post_title
wp post list --post_type=post --category_name=old-campaign --post_status=publish --format=count

# 3. 確認した条件のままIDを渡して変更
wp post update $(wp post list --post_type=post --category_name=old-campaign --post_status=publish --format=ids) --post_status=draft

ポイントは、変更に使う条件と、確認に使った条件をまったく同じにすることです。確認時と実行時で条件を書き換えると、想定外の投稿まで変更されます。対象が0件のときに $(...) が空になると、コマンドが引数不足のエラーになるので、件数を見てから実行してください。対象が数千件ある場合は、時間がかかりサーバーにも負荷がかかるため、アクセスの少ない時間帯に行います。

マルチサイトでは --url でサイトを指定する

マルチサイトでは、wp post は既定でメインサイトを対象にします。ほかのサイトの投稿を扱うには --url を指定します。

wp post list --url=https://example.com/blog/ --post_type=post --format=count

すべてのサイトに同じ操作をしたい場合は、wp site list --field=url でURLの一覧を取り出し、1サイトずつ --url を変えて実行します。

wp post generate は開発環境だけで使う

wp post generate --count=20 --post_type=post

wp post generate はテスト用のダミー投稿を作るコマンドです。表示崩れやページ送りの確認には便利ですが、本番で実行すると意味のない投稿が公開状態で増えてしまいます。ローカルやステージングでだけ使ってください。

(2026年10月現在)ここで紹介したサブコマンドとオプションは WP-CLI の現行版で使えるものですが、WP-CLI のバージョンによって細かな挙動が異なる場合があります。手元の環境では wp cli version と wp help post <サブコマンド> で確認してから使ってください。

まとめ

  • wp post list は --post_type・--post_status・--fields・--format で対象を絞り、まず目で確認する
  • 1件の確認は wp post get、作成は wp post create(--porcelain でIDだけ出力)、更新は wp post update
  • wp post delete は既定でゴミ箱へ移動し、--force はゴミ箱を経由しない
  • カスタムフィールドは wp post meta。先頭が _ のキーは内容を理解してから触る
  • まとめて変更する前に wp db export でバックアップし、確認と実行で同じ条件を使う
  • マルチサイトは --url で対象サイトを指定し、wp post generate は開発環境だけで使う

お気軽にご相談ください

お見積りへ お問い合わせへ
▲