当月で注文があったアマゾン商品の一覧を公開(2)
前月までの商品しか登録していないのに、当月とはこれ如何にと思うのですが、、、「前月で注文があったアマゾン商品の一覧」に変えようかな・・・その改良の2です。今まではどのページを表示しても最新の10件を表示していたのを、なるべく関係のある商品を出すように修正しました。
当月で注文があったアマゾン商品の一覧を公開のページでは、codeigniterを使って、直接WordPressのDBにアクセスし、最新の登録記事を10件取得するというプログラムを勢いで書いて表示していました。これを、なんとか、カテゴリ毎にそのカテゴリにあった商品を表示できないかというが一つあります。codeigniterで作成したときはこんな問い合わせで
みたいな感じで、結果を$queryに入れて、その後foreachで回して、再度post_idでmeta_keyを検索して、meta_valueを取得、最後は、[amazon_linkを一つ一つ埋め込んで、echoで返してdo_shortcodeで展開表示する・・・
とすると、
で表示できます。amazon_linkは、templateをProductAdにしています。
単に、最新情報を取得して、表示する「だけ」なら、これでも十分でしたが、やれカテゴリ別にrecommendしたいとか、iphoneなら検索結果で最新情報出したいよねとか(チコちゃん風)、、したい場合結構手間が多そう(できなくはないけど)
そんなん時間もないし大変なのです。できれば、ちょっと変えるだけで同じ効果をえたいと思いどんな方法があったかなと、、、考え抜いておりましたら、そういえば、WordPressはREST 通信できたじゃないの!?と思い出したのでした(思い出すの遅い)
WordPressのREST API
「WordPress はアプリケーションフレームワークへと生まれ変わろうとしています。」が印象的なのですが、WordPressでREST APIは4.7以上であればすでに何もせずとも利用できます。ここに詳しいDocumentがあります。RESTの現在のバージョンは、Version 2.0 beta 11。
その他にインストールしないといけないのが、ASIN情報などは、WordPressのcustom fieldに登録していますが、使い勝手のよさから、プラグインのAdvanced Custom Fieldsを使っていますが、このままでは、RESTで情報を返してくれないので、RESTを使うために、ACF to REST APIというプラグインをインストールします。
これで準備OK。あとは、function.phpに、下記のようなURLを叩いてJSONでデータを受け取ります。
http://example.com/wp-json/wp/v2/posts?per_page=10
これは、10件の最新情報をJSONで返してきます。これを、foreachで1件づつ取り出して、
とかして、ACFの情報の中にある、ASINという項目(←これは自分で作ったカスタムフィールド)からASIN情報を取り出して、
に当て込んで、最後に、returnするという感じです。codeigniter使う必要なくなりました。
他に、どこかのカテゴリの中の最新10件がほしいということであれば
http://example.com/wp-json/wp/v2/categories=211&per_page=10
など、カテゴリのIDを追加します。カテゴリは複数設定可能ですので、
http://example.com/wp-json/wp/v2/posts?categories=111,128&per_page=10
とすれば、指定したカテゴリをまとめて最新から10件返してくれます(すげーらくしょー!)他には、あるキーワードの検索結果も欲しいという場合は、下記の感じで取得できます。日本語も当然問題ない感じ
http://example.com/wp-json/wp/v2/posts/?search=iphone&per_page=10
あとは、in_categoryでページを判断して、各ページで、categoriesだったりsearchだったりで出す内容を替えています。
いやーいいわーこれ。他にもなにか遊べそう
[…] マックでのSSD換装の前に、こちらでWindowsPCで換装…
[…] マックでのSSD換装の前に、こちらでWindowsPCで換装…
[…] ここの続きですが、つまり、タイトルの通りでして、HDDが常時…