Instagram のウィジェットは、FacebookやTwetterのように公式に提供されていないので、外部サービスをつかったりすることが多いみたいです。
そこで、APIからデータを取得して自前でHTMLを生成する方法を試しました。
必要なものは、
なので、あらかじめ取得しください。
WP側でインスタのウィジェットHTMLを生成するのですが、Instagram基本表示APIへのアクセスは一日200回までなので、ajaxで返すHTMLはupdate_optionでキャッシュしておくことにします。
以下、function.phpにコピペします。
//jquery
function add_my_ajax() {
?>
<script>
jQuery(document).ready(function($) {
$.ajax({
type: 'POST',
url: '<?php echo admin_url( 'admin-ajax.php'); ?>',
data: {
'action' : 'view_instagram',
},
success: function( response ){
$('#instagram-list').html(response);
}
});
return false;
});
</script>
<?php
}
add_action( 'wp_head', 'add_my_ajax', 100 );
//インスタデータの読み込みAJAX
function view_instagram(){
$insta_time = get_option('insta_access_timestamp' , time());//前回APIアクセス時からの経過時間
$html = get_option('insta_html');
//https://developers.facebook.com/docs/graph-api/overview/rate-limiting
//APIへのアクセスは一日200回までなので、10分に一回再読み込み
if (!$html || $insta_time < time() - 600){
$html = get_insta_data();
update_option('insta_access_timestamp' , time());//キャッシュしたタイムスタンプを記録
update_option('insta_html' , $html);//HTMLをキャッシュ
}
echo $html;
die();
}
add_action( 'wp_ajax_view_instagram', 'view_instagram' );
add_action( 'wp_ajax_nopriv_view_instagram', 'view_instagram' );
//インスタAPIからデータを取ってHTML作成
function get_insta_data(){
$conn = curl_init(); // cURLセッションの初期化
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す
curl_setopt($conn,CURLOPT_SSL_VERIFYPEER, false); // サーバー証明書の検証をしない
//インスタ長期アクセストークンの更新 2021/02/25追加
$access_token = get_option('insta_access_token' , "Instagramユーザーアクセストークン");
$url = "https://graph.instagram.com/refresh_access_token"
. "?grant_type=ig_refresh_token"
. "&access_token=$access_token";
curl_setopt($conn, CURLOPT_URL, $url); //URLの設定
$res = curl_exec($conn); //コンテンツの取得
$array_res = json_decode($res,true);
if ($array_res['expires_in']';
$html .= ' ';
$html .= '';
$count -= 1;
}
if ($count
あとは、ウィジェットのカスタムHTMLあたりをつかって、書き込む要素を作ります。
こんな感じで表示されます。あとはCSSでどうにでもできますね。
わかると思いますけど、HTMLは次の部分をいじくればOK
if ($image_url){
$html .= '';
$html .= ' ';
$html .= '';
$count -= 1;
}