ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

WordpressのREST APIで記事の総件数を取得する方法?

こんにちは!
ユアマイスターインターンの高梨です。

最近Wordpressをよく使うようになったので、
その中で少し調べるのに手間取った
REST APIで記事の総件数を取得する方法」
について書いていきたいと思います。

やってみたらやり方はかなりシンプルでした。

概要

APIをたたくときのHeader情報に
記事の総件数が含まれているので、
それを取ってくるだけです!

手順

1.Wordpress REST APIをたたくURLを用意
2.用意したURLのHeader内容を取得
3.取得したHeader内容から記事数を取得

順番に説明していきます。

1.Wordpress REST APIでたたくURLを用意

APIを使う際に、URLをたたいて
情報を持ってくると思います。

例えばこんな感じですね。

http://example.com/sample/wp-json/wp/v2/posts/?search=サンプル



この場合は「posts」というメソッドに
「サンプル」という言葉を検索するクエリパラメータを
付けています。

今回はこれでヒットする記事の件数を
取得していきます。
(サンプルで検索してヒットする記事の件数)

2.用意したURLのHeader内容を取得

1で作ったURLのHeader情報を取得していきます。
ここではPHPでコードの例を上げますね。

get_headersという関数を使うと
URLからHeaderの情報を取得することができます。
(※get_headersについては最後に補足します。)

$url = "http://example.com/sample/wp-json/wp/v2/posts/?search=サンプル";
$headerArray = get_headers($url, 1);



これでとれる結果がこんな感じです。

[
(int) 0 => 'HTTP/1.1 200 OK',
'Date' => 'Sun, 20 Jun 2020 00:00:00 GMT',
'Server' => 'Apache/2.2.31 (Amazon)',
'X-Powered-By' => 'PHP/5.7.1',
'X-Robots-Tag' => 'noindex',
'Link' => '<http://example.com/sample/wp-json/wp/v2/posts/?search=%E3%83%97%E3%83%AD>; 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' => '128',
'X-WP-TotalPages' => '13',
'Allow' => 'GET',
'Content-Type' => 'application/json; charset=UTF-8',
'Connection' => 'close'
]



これでほぼわかりますね!
この'X-WP-Total'のvalueが
検索で引っかかる総記事数です!

3.取得したHeader内容から記事数を取得

最後に記事の総件数を取得するコードが
これになります。

$url = "http://example.com/sample/wp-json/wp/v2/posts/?search=サンプル";
$headerArray = get_headers($url, 1);
$articlesNum = $headerArray["X-WP-Total"]; //記事の総件数を取得



意外と簡単でしたね。

これで、記事の情報すべて持ってこないでも
検索にヒットする件数をピンポイントで取得できます!

他にも'X-WP-TotalPages'のvalueが
ページ数になっているので、
そっちも簡単に取得できます。
(defaultでは1ページ10記事)

ここまでが
WordpressREST APIで記事の件数を取得する方法」
でした。

ご覧いただきありがとうございました。

※補足

get_headersについて少し補足します。
今回使用した際に、

$headerArray = get_headers($url, 1);



というふうに、
謎の1を引数に入れています。

get_headersという関数では、
第二引数に0以外をセットすると
それぞれのレスポンス情報が
Keyとしてセットされるみたいです。

今回の取得例で比較してみると、
以下の感じです。

get_headers($url)の場合

[
[0] => 'HTTP/1.1 200 OK',
[1] => 'Date: Sun, 20 Jun 2020 00:00:00 GMT',
[2] => 'Server: Apache/2.2.31 (Amazon)',
[3] => 'X-Powered-By: PHP/5.7.1',
[4] => 'X-Robots-Tag: noindex',
[5] => 'Link: <http://example.com/sample/wp-json/wp/v2/posts/?search=%E3%83%97%E3%83%AD>; rel="next"',
[6] => 'X-Content-Type-Options: nosniff',
[7] => 'Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages',
[8] => 'Access-Control-Allow-Headers: Authorization, Content-Type',
[9] => 'X-WP-Total: 128',
[10] => 'X-WP-TotalPages: 13',
[11] => 'Allow: GET',
[12] => 'Content-Type: application/json; charset=UTF-8',
[13] => 'Connection: close'
]



get_headers($url, 1)の場合

[
(int) 0 => 'HTTP/1.1 200 OK',
'Date' => 'Sun, 20 Jun 2020 00:00:00 GMT',
'Server' => 'Apache/2.2.31 (Amazon)',
'X-Powered-By' => 'PHP/5.7.1',
'X-Robots-Tag' => 'noindex',
'Link' => '<http://example.com/sample/wp-json/wp/v2/posts/?search=%E3%83%97%E3%83%AD>; 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' => '128',
'X-WP-TotalPages' => '13',
'Allow' => 'GET',
'Content-Type' => 'application/json; charset=UTF-8',
'Connection' => 'close'
]



今回の場合、
「128」という記事の総件数がほしかったので、
値をkeyとvalueに分けました。

もう少し詳しく知りたい方は
PHPの公式リファレンスを見てみてください。

PHP: get_headers - Manual