【WordPress】Instagramのウィジェットをサイドバーに表示させる

Instagram のウィジェットは、FacebookやTwetterのように公式に提供されていないので、外部サービスをつかったりすることが多いみたいです。
そこで、APIからデータを取得して自前でHTMLを生成する方法を試しました。

必要なものは、

  • Instagramユーザーのアクセス許可
  • Instagramユーザーアクセストークン

なので、あらかじめ取得しください。

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;
			}

 

 

nakaike

Share
Published by
nakaike

Recent Posts

USBメモリを復旧する

いつも使っていたUSBメモリを…

2年 ago

[WordPress]Ajaxで画像を送受信

Ajaxで画像を送受信する方法…

3年 ago