WordPress 4.7のREST APIを使った記事閲覧プログラム、Post数無制限版

wp_post_list_unlimited
少し前に掲載した「WordPress 4.7のREST APIを使った記事閲覧プログラム」は、簡易版ということもあり、記事数は最大100件まで。これはREST APIの最大100件/回の制限からきたものだ。このBLOGだとまだ40件にも満たないので100件超えは数カ月後になるが、記事数無制限版に改良した。

ポイントはper_pageパラメータnの時に、何ページ分の記事があるかを知る方法と(=ajaxを実行する回数)、非同期でajaxを使う場合、Callbackの中でしか値を参照できず、ページ分ループし得た値をマージするにはちょっとしたコツが必要となる(同期でajaxを使う場合は普通のループで問題無い)。

主要部分のコードは以下の通り。キーは、レスポンスヘッダにあるX-WP-TotalPagesと、ファンクションの再帰呼出し(recursive call)。

コードから分かるように、全てのデータをマージするため、Callback内でgetPages()をページ数だけ再帰呼出ししている。また初めの一回目にレスポンスヘッダから最大ページ数を保存、その値と、カレントのページ数を比較して、同じになるまで配列のマージを繰り返し、同じになったらDataTablesに値をセットして戻る…といった感じだ。これで記事数が100件超えてもいくらでも読み込める(最大何件まで行けるかは不明)。

ただ以前のコードは、そもそもWPがJSONを組み立てるのが遅く(ショートコードやfunctions.phpも展開するため)、それを解決するのにcrontabへcurlを仕込み、ファイルでのやり取りをしていたが、この手が使えなくなってしまった。最初に全件ロードするのでそれなりに時間がかかるものの、一旦ロードすれば、後はオンメモリなので、動作は非常に速く快適に操作可能だ。

こうしてpostに関しては無制限になったが、category(子category未対応)とtagは最大100件のまま。これに引っかかることはあまり無いと思われるので省略した(同じ方法で対応は可能)。

改良版の記事閲覧プログラムはこちら