MENU

WordPress REST APIで記事を取得する方法|基本エンドポイント解説

WordPress REST APIで記事を取得する方法|基本エンドポイント解説

WordPress REST APIで記事を取得したいなら、まず使うのは wp/v2/posts です。公開済みの記事一覧は GET /wp-json/wp/v2/posts、特定の記事1件は GET /wp-json/wp/v2/posts/{id} で取得できます。

WordPressを外部サイトに一覧表示したいとき、社内ツールで新着記事を拾いたいとき、Node.jsやJavaScriptから記事データを再利用したいときに、この基本形を知っていると作業がかなり早くなります。

  • できること: WordPressの記事一覧取得、1件取得、絞り込み、ページ分割取得
  • よく使う場面: 新着記事の表示、別システム連携、ヘッドレスCMS的な利用
  • 先に覚えるURL: https://example.com/wp-json/wp/v2/posts
  • 最初の結論: 一覧は posts、個別は posts/{id}、軽量化は _fields を使うのが基本です

ここがポイント: 公開済み投稿の取得は、まず認証なしで試せるケースが多いです。最初は curl かブラウザで JSON を確認するとつまずきにくくなります。

目次

まず押さえたい前提

WordPress REST APIは、WordPressのデータをJSONでやり取りするための仕組みです。公式ドキュメントでは、APIの入口として .../wp-json/ が案内されています。

今回の主な対象は次の環境です。

  • 対象: WordPressサイトの投稿データ
  • 主なエンドポイント: wp/v2/posts
  • 取得形式: JSON
  • 確認時点: 2026年4月22日
  • 参照した公式資料: WordPress Developer Resources の REST API Handbook

まずはブラウザで次のURLを開いて、JSONが返るか確認してください。

https://example.com/wp-json/

ここでJSONが見えれば、REST APIの入口には到達できています。

基本エンドポイントはこの2つ

最初に使うべきURLは多くありません。記事取得だけなら、まず次の2本で十分です。

記事一覧を取得する

公開済み投稿の一覧は、次のエンドポイントで取得します。

GET https://example.com/wp-json/wp/v2/posts

curl で試すとこうなります。

curl https://example.com/wp-json/wp/v2/posts

返ってくるのは配列です。各要素に iddatesluglinktitleexcerpt などが入ります。

記事を1件だけ取得する

IDが分かっている記事を1件だけ取りたいときは、末尾にIDを付けます。

GET https://example.com/wp-json/wp/v2/posts/123
curl https://example.com/wp-json/wp/v2/posts/123

こちらは配列ではなく、1件分のJSONオブジェクトが返ります。記事詳細ページを外部システムで表示したいときに使いやすい形です。

一覧取得でよく使うクエリパラメータ

posts エンドポイントは、そのままでも使えます。ただ、実務では絞り込みがほぼ必須です。

件数を調整する

初期状態では、一覧取得の per_page のデフォルトは 10 です。

GET /wp-json/wp/v2/posts?per_page=5
curl "https://example.com/wp-json/wp/v2/posts?per_page=5"

公式資料では per_page は 1 から 100 までです。大量取得したいときでも、1回で全部は返せません。

ページ送りする

2ページ目、3ページ目と順に取りたいなら page を使います。

GET /wp-json/wp/v2/posts?page=2&per_page=10

実務では「最新10件だけ」ではなく、「全件を順番に回収したい」場面があります。そのときは page を増やしながら取得します。

検索文字列で絞る

タイトルや本文に関連する投稿を探したいときは search が便利です。

GET /wp-json/wp/v2/posts?search=API

社内の簡易検索や、特定キーワードを含む投稿一覧を作るときに使いやすい条件です。

スラッグで絞る

URL用のスラッグが分かっているなら、slug で対象を絞れます。

GET /wp-json/wp/v2/posts?slug=hello-world

「IDは知らないが、スラッグは分かる」というケースではこの取り方が実務的です。返り値は1件でも配列なので、その前提で処理します。

並び順を変える

日付順以外で並べたいなら orderorderby を使います。

GET /wp-json/wp/v2/posts?orderby=modified&order=desc

更新日が新しい記事順に取りたいときに役立ちます。

必要な項目だけ返して軽くする

一覧APIをそのまま使うと、本文やリンク情報まで含んだ大きめのJSONが返ります。新着一覧やカード表示なら、全部は不要です。

そんなときはグローバルパラメータ _fields を使います。

GET /wp-json/wp/v2/posts?_fields=id,date,slug,link,title,excerpt
curl "https://example.com/wp-json/wp/v2/posts?_fields=id,date,slug,link,title,excerpt"

外部表示用の一覧では _fields を先に入れる くらいの感覚でちょうどいいです。レスポンスが小さくなり、通信量もパース負荷も抑えやすくなります。

JavaScriptで記事を取得する最小例

ブラウザやNode.js系の処理で触るなら、まずは fetch の最小例が分かれば十分です。

一覧を取得する例

const endpoint = 'https://example.com/wp-json/wp/v2/posts?per_page=3&_fields=id,slug,link,title,date';

async function fetchPosts() {
  const response = await fetch(endpoint);

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}`);
  }

  const posts = await response.json();
  console.log(posts);
}

fetchPosts().catch(console.error);

期待される出力イメージ

[
  {
    "id": 123,
    "date": "2026-04-20T10:00:00",
    "slug": "sample-post",
    "link": "https://example.com/sample-post/",
    "title": {
      "rendered": "サンプル記事"
    }
  }
]

ここで初心者が引っかかりやすいのは、title が文字列ではなくオブジェクトで返る点です。実際に表示するなら title.rendered を使います。

特定記事を取得する例

const postId = 123;
const endpoint = `https://example.com/wp-json/wp/v2/posts/${postId}`;

async function fetchPost() {
  const response = await fetch(endpoint);

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}`);
  }

  const post = await response.json();
  console.log(post.title.rendered);
  console.log(post.content.rendered);
}

fetchPost().catch(console.error);

記事詳細ページを別フロントで描画するなら、この形が基本になります。

curlで確認するときの実務的な見方

コードを書く前に curl でAPIの返り値を確認しておくと、無駄なデバッグが減ります。

よく見るポイントは次のとおりです。

  • HTTPステータスが 200 になっているか
  • 想定どおり JSON が返っているか
  • title.renderedexcerpt.rendered のような入れ子構造を理解できているか
  • ページング時のヘッダー X-WP-TotalX-WP-TotalPages が読めるか

ヘッダーも含めて見たいなら、たとえば次のように確認します。

curl -I "https://example.com/wp-json/wp/v2/posts?per_page=10"

記事数が多いサイトでは、このヘッダーを見ないと「どこまで取得すれば終わりか」が分かりません。

実務でよくある使いどころ

WordPress REST APIの投稿取得は、単なる技術メモではなく、日常的な連携処理にそのまま使えます。

外部サイトに新着記事を出す

採用サイト、企業サイト、製品サイトなどで、ブログ本体とは別の場所に新着一覧だけ出したいときがあります。

その場合は次の組み合わせが定番です。

  • per_page=3per_page=5
  • _fields=id,link,title,date,excerpt
  • フロント側で title.rendered を整形して表示

これなら本文全体を取らずに済むので、一覧表示が軽くなります。

更新記事だけ拾う

更新ベースでデータを同期したいなら、modified_afterorderby=modified が役立ちます。

  • 定期バッチで「前回以降に更新された記事だけ」取得する
  • 外部DBに差分反映する
  • 更新通知や監視に使う

新着だけでなく更新も追いたい業務では、公開日より更新日を見るほうが実用的です。

スラッグベースで記事を引く

フロント側のルーティングでスラッグを使う構成なら、?slug=xxx の取得が扱いやすくなります。

ID直指定よりURL設計に寄せやすく、ヘッドレスCMSっぽい使い方をしたいときに相性がいい方法です。

よくある失敗と対処

WordPress REST APIはシンプルですが、最初の数回は同じところで詰まりやすいです。

JSONが返らない

まず確認したい点は次のとおりです。

  • URLが .../wp-json/wp/v2/posts になっているか
  • サイトURL末尾のスラッシュやリダイレクトで崩れていないか
  • セキュリティ系プラグインやサーバー設定でAPIアクセスが制限されていないか

トップの wp-json が開けないなら、投稿エンドポイント以前の問題です。入口から切り分けるほうが早いです。

1件返ると思ったのに配列だった

/posts/123 はオブジェクトですが、/posts?slug=hello-world は配列です。同じ「1件だけ欲しい」でも返り値の形が違います。

この違いを見落とすと、JavaScriptで post.title.rendered と書いた瞬間にエラーになります。

必要以上に重いレスポンスを取っている

一覧表示なのに本文 content まで毎回取っていると、通信量が増えます。

対処は単純です。

  • 一覧では _fields を使う
  • 詳細画面だけ本文を取る
  • per_page を必要以上に大きくしない

非公開投稿まで取れると思っていた

公式リファレンスでは、投稿一覧の status パラメータも用意されています。ただし、非公開や下書きなどを扱う場合は権限や認証の前提が変わります。

公開済み記事の取得だけを目的にするなら、まずは publish 前提で設計したほうが安全です。

投稿と固定ページは別エンドポイント

ここは実務で地味に大事です。WordPressでは投稿と固定ページでエンドポイントが分かれています。

  • 投稿: /wp-json/wp/v2/posts
  • 固定ページ: /wp-json/wp/v2/pages

お知らせ一覧やブログ記事は posts、会社概要やお問い合わせのような固定ページは pages です。欲しいデータ種別を間違えると、JSONは返っても中身が合いません。

代替手段と使い分け

WordPressの記事取得はREST API一択ではありません。とはいえ、次のように整理すると選びやすくなります。

REST APIが向くケース

  • 外部アプリやフロントエンドから扱いたい
  • JSONで受け取りたい
  • 投稿一覧や個別記事をHTTPで取得したい

管理画面やテーマ内処理が向くケース

  • WordPressテーマ内部だけで完結する
  • PHPのテンプレートタグやクエリで十分
  • 外部連携より表示調整が主目的

外部から使うならREST API、WordPress内部だけで閉じるなら通常のテーマ実装、という切り分けが分かりやすいです。

最初に試す手順

ここまで読んだら、次の順で試すと詰まりにくくなります。

  1. https://example.com/wp-json/ をブラウザで開く
  2. https://example.com/wp-json/wp/v2/posts で投稿一覧を確認する
  3. ?per_page=3 を付けて件数を変える
  4. ?_fields=id,slug,link,title,date を付けて軽量化する
  5. /{id} で1件取得を試す
  6. JavaScriptの fetch に置き換える

この順なら、URLミスとJSON構造の誤解を早い段階で潰せます。

まとめ

WordPress REST APIで記事を取得するときの基本は、かなり明快です。

  • 一覧取得は GET /wp-json/wp/v2/posts
  • 1件取得は GET /wp-json/wp/v2/posts/{id}
  • 絞り込みは per_pagepagesearchslugorderby
  • 軽量化は _fields
  • 件数の把握は X-WP-TotalX-WP-TotalPages

最初から複雑な連携を組むより、まず curl で返り値を確認し、次に fetch へ移すほうが確実です。次に見るべきポイントは、自分の用途が「一覧表示」なのか「詳細取得」なのか、そして本文まで必要かどうかです。そこが決まると、使うパラメータもかなり絞れます。

参照リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次