概要
簡易的にWordPressにインスタクラムに投稿された写真の一覧を表示させる方法。
※あらかじめアクセストークンを取得しておく必要があります。
Instagram Graph APIのビジネスアカウントIDとアクセストークン取得
検索部分
/** ----------------------------------
instagram検索
------------------------------------ */
function instagram_search(){
// 検索件数
$num = 10;
// API url
$fb_api = 'https://graph.facebook.com/v15.0/';
$insta_id = '【インスタID】';
$token = '【アクセストークン】';
$query = 'media.limit('. $num. '){caption,like_count,media_url,permalink,timestamp,username,thumbnail_url,shortcode,children}';
if ( false === ( $insta_data = get_transient( 'instagram' ) ) ) {
$url = "{$fb_api}{$insta_id}?fields={$query}&access_token={$token}";
$insta_json = file_get_contents($url);
try {
$insta_data = json_decode( $insta_json, false, 512, JSON_THROW_ON_ERROR );
} catch ( JsonException $e ) {
}
set_transient( 'instagram', $insta_data, 2 * HOUR_IN_SECONDS );
}
return $insta_data;
}
if ( false === ( $insta_data = get_transient( 'instagram' ) ) ) {
「instagram」の部分はTransients APIで保存するときのユニークな名前ですので「instagram」でなく違う名前でもOKです。
「instagram」がないもしくは最終保存期間から一定期間をすぎると、APIを取得しにいきます。
set_transient( 'instagram', $insta_data, 2 * HOUR_IN_SECONDS );
APIで取得したデータをTransients APIに保存します。保存期間の指定をします。
MINUTE_IN_SECONDS = 60 (秒)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS (1時間)
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS (1日)
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS (1週間)
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS (1年)
今回は2時間にしています。(2 * HOUR_IN_SECONDS)
頻繁に更新されない情報なのであればもっと伸ばしても良いと思います。
表示部分
<?php $insta_data = instagram_search(); ?>
<ul>
<?php foreach((array)$insta_data->media->data as $key => $post): ?>
<?php
if($post->thumbnail_url):
$insta_image = $post->thumbnail_url;
elseif($post->media_url):
$insta_image = $post->media_url;
endif;
?>
<li>
<a href="<?php echo $post->permalink; ?>" target="_blank">
<figure>
<img src="<?php echo $insta_image; ?>" loading="lazy">
</figure>
</a>
</li>
<?php endforeach; ?>
</ul>
if($post->thumbnail_url):
$insta_image = $post->thumbnail_url;
elseif($post->media_url):
$insta_image = $post->media_url;
endif;
写真か動画で取得方法が違います。
<?php echo $post->permalink; ?>
リンクはpermalinkで取得することができます。
<?php echo $post->like_count; ?>
その他、いいねの数はlike_countで取得することができます。