この実装、面倒なら代行します
外部サイトのAPIを使ってそこのデータを取得して、こちらの記事として登録したい、というニーズはほとんどありません。
が、一回だけありました。
それは、外部サイトに制作物のポートフォリオがあって、そのそれぞれの制作物の詳細情報をこちらのサイトで表示したいとき、でした。
ポートフォリオ情報は外部サイトからAPIで取得したデータを、こちらで用意しておくアーカイブページで表示させればそれですみます。
しかし、そのアーカイブをクリックしたら詳細ページに行かなければならない、となると、こちらのサイトに、リンク先となる空の詳細ページが存在しないといけません。一方、制作物のポートフォリオは外部サイトのほうで勝手に増えていきます。となると、自動で空詳細ページを登録しなければならない、ということになります。
そこで、
「APIで製品IDを取得して、そのIDのページがこちらのサイトになければ登録する」
ということをやってみます。
制作物のカスタム投稿タイプ名を’products’とします。
まず、テーマの functions.php に、現在同記事が存在するかどうかチェックするプログラムを記述します。
function whetherExistPost($type, $slug){ $loops= new wp_query(); $loops->query("post_type={$type}&name={$slug}"); if($loops->have_posts()) { return true; } else { return false; } }
次に、products-archive.php に以下を記述します。
<?php $url = "http://hogehoge.com/api/portfolio/all/"; //他サイトのAPIです。 $json = file_get_contents($url); $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $arr = json_decode($json,true); if ($arr === NULL) { return; }else{ $json_count = count($arr["products"]); $product_ids = array(); for($i=$json_count-1;$i>=0;$i--){ $product_ids[] = $arr["products"][$i]["id"]; //APIで取得したproducts IDを配列に格納 } foreach( $product_ids as $product_id ){ //なんか表示させる処理(省略) if(!whetherExistPost('products', $product_id)){ //スラッグがproducts IDのページが存在しないなら $my_post = array( 'post_name' => $product_id, //スラッグをproducts IDに 'post_title' => '製品 '.$product_id, //ページタイトルを「製品 product_id」に 'post_status' => 'publish', 'post_type' => 'products' ); // 投稿をデータベースへ追加 wp_insert_post( $my_post ); } } }
あまり用途ないかもしれませんが、同様の要件があった際には参考にしてください。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。