As of 2021 it appears that multiple Instagram embeds on the same page work again! However, WordPress has dropped support for these embeds due to changes in the Facebook API, so you might be interested in how to get them back – read about that in this article!
At some point recently (February 2018), Instagram broke their oEmbed implementation which causes JavaScript errors and embeds that overlap each other if multiple embeds are present on the same page. Use the snippet below to mitigate this issue and hopefully Instagram will fix it in the future. The snippet makes sure only the first embed will enqueue the JavaScript file that Instagram uses to work around the bug.
/**
* Remove Instagram embed.js script on each embed
*/
add_filter('embed_oembed_html', function($html, $url, $attr, $post_id) {
$regex = '/<script.*instagram\.com\/embed.js.*\s?script>/U';
$regex_2 = '/<script.*platform\.instagram\.com\/.*\/embeds\.js.*script>/U';
if(preg_match($regex, $html) || preg_match($regex_2, $html)) {
add_filter('kh_has_instagram_embed', '__return_true');
$html = preg_replace($regex, '', $html);
$html = preg_replace($regex_2, '', $html);
return $html;
}
return $html;
}, 100, 4);
/**
* Enqueue the embed.js script once at the bottom of the page, if at least one Instagram embed is enqueued
*/
add_filter('wp_footer', function() {
if(apply_filters('kh_has_instagram_embed', false)) :
?>
<script async defer src="//www.instagram.com/embed.js"></script>
<?php
endif;
}, 999);