CodeCode

なんか色々おぼえ書き。だいたいweb制作関連。

WP REST APIで投稿数、ページ数を取得する

WP REST APIをでページネーションを作る際に、投稿数、ページ数が必要ですが取ってきたJSONには含まれていません。

ではどこにあるかというと、HTTPヘッダに含まれています。

ターミナルでコマンドを叩くとHTTPヘッダを確認することができます。

curl -s -D - https://cms.codecodeweb.com/wp-json/wp/v2/posts?page=1&per_page=10
HTTP/1.1 200 OK
Date: Mon, 01 Apr 2019 14:44:56 GMT
Server: Apache/2.4.18 (Ubuntu)
X-Robots-Tag: noindex
Link: <https://cms.codecodeweb.com/wp-json/wp/v2/posts?page=1>; rel="next"
X-Content-Type-Options: nosniff
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages
Access-Control-Allow-Headers: Authorization, Content-Type
X-WP-Total: 32
X-WP-TotalPages: 4
Allow: GET
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

~ 以下略 ~

この中にX-WP-TotalとX-WP-TotalPagesが含まれています。

X-WP-Total: 32
X-WP-TotalPages: 4

X-WP-Totalは、総記事数 X-WP-TotalPagesは、総ページ数です。

Fetch APIで投稿数、ページ数を取得する

Reactで作っていますが、基本的にはどのライブラリでやっても同じだと思います。

const rest_url = "https://cms.codecodeweb.com/wp-json/wp/v2/posts?page=1&per_page=10"

fetch(rest_url)
.then((response) => {
    //総ページ数をコンソールに出力
    console.log(response.headers.get('x-wp-totalpages'))
    return response.json()
})
.then((responseData) => {
    this.setState({
        data: responseData
    })
})

同じ要領で

response.headers.get('X-WP-Total')

とすることで、投稿数を取得できます。

今回はconsole.logしていますが、setStateでstateに入れておくこともできます。

TOPへ戻る