23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WordPressのREST APIで全記事を取得したい

Last updated at Posted at 2020-02-18

ポートフォリオを引き続きアップデートしており
今はWordPressのREST APIを使用してブログ機能を追加しています。

#TL;DR
WordPressのREST APIだと最大でも100件までしか記事が取得できなかったから
functions.phpに全記事を書き出すJSONを追加してみた。

#WordPressのREST APIの取得について
まずドキュメントへのリンクを。

WordPressの公開URL末尾に「/wp-json/wp/v2/」することで取得可能で
ここにパラメーターなどを渡して、カテゴリー一覧などを取得します。

公式サイトのURLだとこんなイメージ

https://wordpress.org/wp-json/wp/v2/

デフォルトで最大件数で取得する場合のパラメーターでよくあるのはこれみたいです(検索調べ)

/wp-json/wp/v2/posts?per_page=100&page=1

デフォルトで10件、パラメーターを渡して最大で100件までの取得です。
Ajax表示や各ページングで随時呼び出す想定なのでしょうね。

#なぜ全記事を読み込もうと思ったのか
今回はNuxt.jsを使用していて、generateで静的での書き出し&Netlifyでホスティングを想定しています。
Nuxtで動的なページを生成する際は
nuxt.config.jsに以下のようなものを記述して、生成するページを設定する必要があります。
REST APIのデフォルトに従うと、最大で100件までしか生成できません。。

ドキュメントより抜粋

nuxt.config.js
export default {
  generate: {
    routes: [
      '/users/1',
      '/users/2',
      '/users/3'
    ]
  }
}

#WordPressのfunctions.phpに書いたもの

こちらの投稿を大いに参考にさせていただきました
(※元記事は複数の投稿タイプを一緒に書き出したいというもの)

これにより、以下のようなパスで全記事読み込みが可能になりました:raised_hands:

/wp-json/custom/v1/allposts

吐き出しを行う項目も関数内で細かく設定出来るので、環境に合わせてこれから少し調整しようと思います。

functions.php
function custom_api_get_all_posts() {
    register_rest_route( 'custom/v1', '/allposts', array(
        'methods' => 'GET',
        'callback' => 'custom_api_get_all_posts_callback'
    ));
}
add_action( 'rest_api_init', 'custom_api_get_all_posts' );   

function custom_api_get_all_posts_callback( $request ) {
    $posts_data = array();
    $posts = get_posts( array(
            'posts_per_page' => -1
        )
    ); 
    foreach( $posts as $post ) {
        $id = $post->ID;
        $posts_data[] = (object) array( 
            'id' => $id, 
            'slug' => $post->post_name,
            'title' => $post->post_title,
            'content' => $post->post_content,
        );
    }                  
    return $posts_data;                   
} 

#雑記
記事一覧、ページ一覧、カテゴリー一覧などなど、作成するページが多いですが
ある程度コンポーネント化出来ていれば、ファイルごとコピーで流用可能なので、今後が楽しみです◎

かなり数多くのサイトがWordPressで構築されていること、ユーザー側が管理画面に慣れていることから
案件ベースでの静的CMS(Headless CMS)は
しばらくはWordPress REST APIの可能性が一番高いのでは…と個人的には思っています。

クライアントさえ同意してくれれば、すぐに導入していけるチャンスが多そうです。
どういった形でクライアントに提案していくかが、当面の課題です:sweat_smile:

23
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?