Claude Code+WP-CLIを使えば、WordPress全記事のCTAとカテゴリをSSH経由で一括修正できます。
- 要点1: WP-CLIの
wp post listとwp post term listで問題箇所を一括診断できる - 要点2: PHPスクリプトをSSH経由で実行するとCTAのHTML・リンク先を全記事まとめて置換できる
- 要点3:
wp post term setコマンドで壊れたカテゴリを正しいカテゴリに修正できる
対象: WordPress記事のCTA・カテゴリ設定を一括修正したいDX推進担当者・Web担当者
今日やること: wp post list --fields=ID,post_title,post_status を実行して現在の記事一覧を確認する
この記事の目次
Claude Code(Anthropic社のAIコーディングツール)とWP-CLI(WordPressをコマンドラインから操作するツール)を組み合わせると、公開済み記事のCTA(Call to Action)デザインやカテゴリの誤設定を、SSH経由で一括修正できます。
「全記事のCTAリンク先がバラバラになっている」「カテゴリが正しく設定されていない記事が複数ある」——こうした問題は、記事を大量に公開する際に発生しがちです。
この記事では、実際にある企業メディアで発生した「CTAがテキストリンクのみになってしまった問題」と「カテゴリが壊れた状態になった問題」を、Claude Code+WP-CLIで一括修正した手順を解説します。
なぜWordPress記事のCTAとカテゴリが壊れるのか
WordPressの記事を自動生成・一括公開するワークフローでは、CTAのデザイン不統一やカテゴリの誤設定が起きやすい構造的な原因があります。問題解決の前に、なぜ発生するのかを理解しておくことが重要です。
CTAが「テキストリンクだけ」になる原因
CTAとは、「無料相談はこちら」「詳細を見る」などの行動促進ボタンのことです。本来はボックスデザイン(角丸のデザインエリア+ボタン)が正しい形ですが、記事の自動生成スクリプトのテンプレートが古いままだったり、カテゴリによってテンプレートが分岐していたりすると、テキストリンクだけに劣化してしまうことがあります。
実際に起きた事例では、記事IDが高い(新しい)記事ほどCTAがテキストリンクのみになっており、古い記事は正しいボックスデザインになっているという状況でした。スクリプトのCTAテンプレートが途中で変更されたにもかかわらず、既存記事への修正が漏れていたのが原因でした。
カテゴリが「2」「14」などの異常な名前になる原因
WordPressのカテゴリには「term_id」と呼ばれる数値IDがあります。本来は「AI活用ノウハウ」「導入事例」などのカテゴリ名(スラッグ)で指定すべきところを、数値IDをそのままカテゴリ名として登録してしまった場合、「2」「14」という名前の意味不明なカテゴリが生成されます。
| 症状 | 原因 |
|---|---|
| カテゴリ名が「2」「14」などの数字 | 記事公開スクリプトがterm_idをカテゴリ名として誤登録 |
| カテゴリが「未分類」のまま | スクリプトのカテゴリ設定がスキップされている |
| 一部記事だけカテゴリが異なる | スクリプト改訂前後で設定方法が変わった |
このような問題が放置されると、サイトのカテゴリ構造が崩れ、内部リンクや記事一覧ページのSEOに悪影響を与えます。
問題の全体像を診断する(WP-CLIコマンド)
WP-CLI(WordPress Command Line Interface)とは、ターミナルからWordPressの管理操作をコマンドで行えるツールです。記事投稿・プラグイン管理・データベース操作などをGUI管理画面を開かずに実行できます。SSH接続とWP-CLIを組み合わせることで、Claude Codeからリモートサーバーのすべての記事を一度に確認・修正できます。
修正作業の前に、まず「何が壊れているか」の全体像を把握することが重要です。
全記事のカテゴリ割り当てを確認する
以下のコマンドで、全記事のIDとカテゴリを一覧取得します。
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ post list --post_type=post --post_status=publish \ --fields=ID,post_title,post_date \ --format=json' | python3 -c "import sys, jsonposts = json.load(sys.stdin)for p in posts: print(p['ID'], p['post_title'][:30])"
カテゴリを確認するには、各投稿IDに対して以下を実行します。
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ post term list [投稿ID] category --fields=term_id,name --format=json'
「name」が「2」「14」などの数字になっていれば、壊れたカテゴリが割り当てられています。
全記事のCTAコンテンツを確認する
全記事の本文末尾をチェックしてCTAのパターンを分類します。Claude Codeに依頼すると、以下のようなコマンドで一括チェックが可能です。
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ eval "\$posts = get_posts(array(\"numberposts\"=>-1, \"post_status\"=>\"publish\"));foreach(\$posts as \$p) { \$has_box = (strpos(\$p->post_content, \"cta-box\") !== false) ? \"ボックスあり\" : \"テキストのみ\"; echo \$p->ID . \": \" . \$has_box . \"\n\";}"'
実際の診断では、記事15本のうち4本が「テキストのみ」で、残り11本は「ボックスあり」という状態が判明しました。さらに、「ボックスあり」の記事も問い合わせリンク先が3種類(/contact/、/coaching/、外部フォームURL)に分散していることがわかりました。
リンク先の不統一を検出する
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ eval "\$posts = get_posts(array(\"numberposts\"=>-1, \"post_status\"=>\"publish\"));foreach(\$posts as \$p) { preg_match_all(\"/href=\\\"([^\\\"]*contact[^\\\"]*|[^\\\"]*coaching[^\\\"]*|[^\\\"]*forms\.gle[^\\\"]*)\\\"/\", \$p->post_content, \$matches); if (!empty(\$matches[1])) { echo \$p->ID . \": \" . implode(\", \", array_unique(\$matches[1])) . \"\n\"; }}"'
このコマンドで、CTAのリンク先URLが記事ごとに何種類あるかを一覧化できます。
\ Claude Codeの導入、何から始めればいいかわかります /
法人向けClaude Code個別指導の無料相談はこちらカテゴリの壊れを修正する
問題の全体像を把握したら、カテゴリの修正から着手します。
正しいカテゴリのterm_idを確認する
まず、正しいカテゴリ(「AI活用ノウハウ」など)のterm_idを確認します。
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ term list category --fields=term_id,name,slug --format=table'
実行すると、以下のような一覧が得られます。
| term_id | name | slug |
|---|---|---|
| 1 | 未分類 | uncategorized |
| 7 | AI活用ノウハウ | ai-knowhow |
| 8 | 導入事例 | case-study |
| 9 | 最新AIニュース | ai-news |
| 13 | 2 | 2(←壊れたカテゴリ) |
| 16 | 14 | 14(←壊れたカテゴリ) |
「名前が数字になっているカテゴリ」が壊れたカテゴリです。これらのterm_idをメモしておきます。
wp post term setで記事のカテゴリを修正する
正しいカテゴリのterm_idを特定したら、誤カテゴリが設定されている記事を修正します。
# 例: 記事ID 221, 219, 214 を「AI活用ノウハウ」(term_id: 7)に修正for POST_ID in 221 219 214; do ssh conoha "php ~/wp-cli.phar --path=\$HOME/public_html/[サイト名]/ \ post term set $POST_ID category 7"done# 例: 記事ID 216 を「最新AIニュース」(term_id: 9)に修正ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ post term set 216 category 9'
wp post term setは既存のカテゴリ割り当てを置き換えます。追加したい場合はsetをaddに変えます。修正後にwp post term list [投稿ID] categoryで正しくカテゴリが設定されたか確認することをおすすめします。
壊れたカテゴリ(ゴミカテゴリ)を削除する
カテゴリ名が「2」「14」の壊れたカテゴリは、記事から外すだけでは残り続けます。不要なカテゴリは削除しておきましょう。
# 壊れたカテゴリ(term_id: 13, 16)を削除ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ \ term delete category 13 16'
削除後にwp term list categoryで壊れたカテゴリが消えたことを確認します。
ポイントカテゴリの削除前に、必ずそのカテゴリに属する記事がゼロになっているか確認してください。記事が残った状態でカテゴリを削除すると、その記事は「未分類」に移動してしまいます。
Claude Codeの導入や活用方法について、個別にご相談いただけます。「どの機能から使えばいいか」「自社WordPressサイトへの適用方法を知りたい」といった段階から対応しています。
CTAデザインとリンク先を一括置換する
カテゴリ修正が終わったら、次はCTAの一括修正に取り組みます。テキストリンクのみのCTAをボックス型デザインに統一し、リンク先URLも1つに統一します。
正しいCTAのHTMLテンプレートを定義する
まず、「正しいCTA」のHTMLを定義します。ボックス型CTAの典型的なHTML構造は以下です。
<div class="cta-box" style="border:2px solid #2b6cb0;border-radius:8px;padding:24px;margin:32px 0;text-align:center;"><h3 style="margin-top:0;color:#2b6cb0;">Claude Codeの導入・活用をサポートします</h3><p>株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。非エンジニアの方でも3ヶ月で業務自動化を実現できるプログラムです。「何から始めればいいかわからない」という段階からご支援いたします。</p><a href="https://nexa-corp.jp/claude-code-private-coaching/" style="display:inline-block;background:#2b6cb0;color:#fff;padding:12px 32px;border-radius:4px;text-decoration:none;font-weight:bold;">Claude Code個別指導の詳細・無料相談はこちら →</a></div>
このHTMLを「正しいCTAテンプレート」として定義し、全記事に適用します。
PHPスクリプトで全記事を一括更新する
WP-CLIのevalコマンドとPHPスクリプトを組み合わせると、全記事のCTAを一括置換できます。
以下のような方針でスクリプトを組みます。
- 全公開記事を取得する
- 各記事のpost_contentに古いCTAパターン(テキストリンク形式)が含まれているか正規表現でチェックする
- 含まれている場合は正しいボックス型CTAに置換する
wp_update_post()で記事を更新する
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ eval "\$new_cta = \"<div class=\\\"cta-box\\\" ...>(正しいCTAのHTML)</div>\";\$posts = get_posts(array(\"numberposts\"=>\"-1\", \"post_status\"=>\"publish\"));\$updated = 0;foreach(\$posts as \$p) { \$content = \$p->post_content; // 旧CTAパターンを新CTAに置換(正規表現で柔軟にマッチ) \$new_content = preg_replace( \"/<a[^>]*href=[\\\"'"'"'][^\\\"'"'"']*(contact|coaching|forms\.gle)[^\\\"'"'"']*[\\\"'"'"'][^>]*>[^<]*<\/a>/\", \$new_cta, \$content ); if (\$new_content !== \$content) { wp_update_post(array(\"ID\"=>\$p->ID, \"post_content\"=>\$new_content)); echo \"Updated: \" . \$p->ID . \"\n\"; \$updated++; }}echo \"Total updated: \" . \$updated . \"\n\";"'
Claude Codeに依頼すると、このようなPHPスクリプトをその場でサイトの状況に合わせて生成してくれます。正規表現のパターンも、実際の記事のHTMLを渡すだけで自動的に最適なものを作成します。
ニュース記事など特殊なCTAが混在する場合の対処法
ニュース記事(お知らせ)はCTAの文言がコンテンツ記事と異なる場合があります。一律に置換してしまうと、カテゴリに合わないCTAが表示される可能性があります。
対策として、カテゴリごとにCTAテンプレートを分岐させます。
// カテゴリを取得してCTAを分岐$categories = get_the_category($p->ID);$cat_slugs = array_map(function($c) { return $c->slug; }, $categories);if (in_array('ai-news', $cat_slugs)) { $new_cta = "(ニュース記事用CTAのHTML)";} else { $new_cta = "(通常記事用CTAのHTML)";}
実際の修正作業でも、ニュース記事1本だけが「CTAボックスが適用されない」という状態になりました。原因を調べると、ニュース記事のCTAテンプレートが別のクラス名(cta-box-news)を使っていたためでした。Claude Codeがコードを確認して分岐パターンを発見し、修正を提案しました。
\ 業務自動化のお悩み、プロが30分で整理します /
法人向けClaude Code個別指導の無料相談はこちらClaude Codeが問題診断から修正まで担う流れ
ここまで個別のコマンドを紹介してきましたが、実際の作業ではClaude Codeが診断から修正まで一連の流れを担います。どのように連携するのかを具体的に説明します。
「正しいCTAデザイン」のスクリーンショットを渡す
まず「こういうデザインになっていない」という問題をClaude Codeに伝えます。スクリーンショット(正しいCTAデザイン)を貼り付け、「直近の記事がこのデザインになっていない」と伝えるだけで十分です。
Claudeはその情報を元に、何が問題かを自分で判断するための情報収集(WP-CLIでの状態確認)から始めます。
ユーザー: [スクリーンショット]直近のNexa記事がこの写真のようなCTAになっていない。カテゴリも不適切。問い合わせのリンク先はhttps://forms.gle/〜にしてほしいClaude Code: まずスクリーンショットを確認しました。直近の記事のCTAとカテゴリ状態を確認します。
Claude Codeが問題を診断して修正方針を提示
WP-CLIで状態を確認したClaude Codeは、問題のある記事のリストと修正方針を提示します。
実際の診断結果はこのような形で提示されました。
| 問題 | 対象記事 | 修正内容 |
|---|---|---|
| カテゴリ「2」(壊れ) | ID 221, 219, 214 | →「AI活用ノウハウ」に修正 |
| カテゴリ「14」(壊れ) | ID 216 | →「最新AIニュース」に修正 |
| CTAがテキストリンクのみ | ID 221, 219, 214, 216 | →ボックス+ボタンCTAに修正 |
リンク先が/contact/や/coaching/ |
全15記事 | →forms.gle/〜に統一 |
「この方針で修正を進めます」と伝えるだけで、Claude Codeが修正スクリプトを生成して実行します。
修正スクリプトを自動生成・実行する
Claude Codeはサイトの実際の構造(カテゴリのterm_id、CTAのHTML構造)を確認した上で、そのサイトに最適な修正スクリプトを生成します。汎用的なサンプルコードではなく、実際のデータに基づいたコードが生成されるため、コピー&ペーストのミスが発生しません。
修正完了後は、更新された記事のIDと修正内容のサマリーを出力します。WPキャッシュのクリアも自動で実行してくれます。
# キャッシュクリアssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ cache flush'
一連の作業(診断→カテゴリ修正→CTA一括置換→キャッシュクリア)が30分以内に完了しました。手動でWordPressの管理画面から15記事を個別修正すると、1〜2時間かかる作業量です。
なお、WP-CLIの詳しい使い方やSSH接続の設定については「Claude Code × WordPressで記事公開を完全自動化」でも解説しています。あわせてご参照ください。
よくある質問
Q. WP-CLIをSSH経由で使うための事前設定は?
レンタルサーバーのSSH設定を有効化し、~/.ssh/configに接続先のホスト情報を登録しておく必要があります。WP-CLIは多くのレンタルサーバーにデフォルトでインストールされていますが、ない場合はcurl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.pharでダウンロードできます。ConoHa WINGの場合は~/wp-cli.pharにあり、php ~/wp-cli.pharで実行します。
Q. カテゴリのterm_idはどうやって確認する?
wp term list category --fields=term_id,name,slug --format=tableコマンドを実行すると、全カテゴリのterm_id・名前・スラッグが表形式で確認できます。Claude Codeにこのコマンドを実行してもらうのが最も簡単です。
Q. CTAの修正がうまくいったか確認する方法は?
修正後に以下のコマンドで確認できます。cta-boxクラスが全記事に含まれているかをチェックします。
ssh conoha 'php ~/wp-cli.phar --path=$HOME/public_html/[サイト名]/ eval "\$posts = get_posts(array(\"numberposts\"=>\"-1\", \"post_status\"=>\"publish\"));foreach(\$posts as \$p) { \$has = strpos(\$p->post_content, \"cta-box\") !== false ? \"OK\" : \"NG\"; echo \$p->ID . \": \" . \$has . \"\n\";}"'
全記事が「OK」になっていれば修正完了です。
Q. PHPスクリプトで記事を更新する際のバックアップは必要?
本番環境で一括更新を行う前に、wp db export backup.sqlでデータベースのバックアップを取得しておくことをおすすめします。万が一の際もwp db import backup.sqlで元の状態に戻せます。
\ AI活用の「次の一手」を一緒に考えませんか /
法人向けClaude Code個別指導の無料相談はこちらまとめ
Claude Code+WP-CLIを使ったWordPress記事の一括修正ポイントを振り返ります。
- 診断が先: WP-CLIで全記事のカテゴリとCTAの状態を一覧確認し、問題の全体像を把握してから修正に入る
- カテゴリは
wp post term setで修正: term_idを確認してから対象記事に正しいカテゴリを割り当て、壊れたカテゴリは削除する - CTAはPHPスクリプトで一括置換: 正規表現で古いCTAパターンをマッチし、正しいHTMLテンプレートに置換する
- 特殊パターンに注意: ニュース記事など特定カテゴリで別テンプレートを使っている場合は分岐処理が必要
- Claude Codeが診断〜修正を自律実行: スクリーンショットと修正方針を伝えるだけで、WP-CLIコマンドの生成・実行・確認まで担ってくれる
WordPressサイトを複数人で運用したり、記事公開スクリプトが変わったりする場合、CTAやカテゴリのズレは定期的に発生します。今回紹介した診断コマンドをcronジョブとして設定しておくと、問題の早期発見にも役立ちます。
Claude Codeの導入・活用をサポートします
株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。WordPressの一括修正から、SEO記事の自動生成・公開まで、Claude Codeで実現できることを個別指導でお伝えします。「何から始めればいいかわからない」という段階からご支援いたします。詳しい設定方法やカスタマイズは無料相談でお伝えしています。





