プラグインなし!Instagram埋め込みをお好みのスタイルで

Instagram(インスタグラム)のステキ画像をWordPressの記事に埋め込みたい場合、embed機能を使ったりInstagramの埋め込みコードを取得する方法はありますが、サイズ・キャプション有無をいじれなかったり、処理が重かったり、コードが長すぎたりでどうもかゆいところに手が届かない…。
それなら自前でショートコードを作ってしまいましょう。プラグイン不要です。

embedはキャプションやサイズの融通がきかない

WordPressの投稿画面のテキストモードで単純にURLを書いたり

URLを[embed]ショートコードで囲んだり

これだけのコードでかっこよく表示されるのがembed機能。

このように表示されます。

が、

  • 処理が重い(特に複数指定した場合)
  • キャプション有無を指定できない
  • サイズを変更できない

というデメリットも。

埋め込みコードは長くてウザい

Instagramの画像ページから埋め込みコードを取得することもできます。
画像ページを開いて右下の「…」をクリックするとこのような画面が出ます。

「埋め込み」を選ぶとこう。

コードをコピーし、WordPressの投稿画面に貼り付けると埋め込めます。

▼このように表示されます。

が、コードがとにかく長い!これはキャプションなしの例ですが…

投稿画面をこんなコードに占拠されては記事を書くのも一苦労です。誤って一部消してしまったりしたらもう何がなにやら…。

簡単なショートコードを作ってみる

使用イメージ

と書くだけで、こんな風に表示される機能です。

サイズを指定したい場合は

と書くとこうなります。

functions.phpに以下のコードを追加

functions.phpに以下のコードを追加します。

最後の方の「●●●さん(@xxxxx)がシェアした投稿」とtimeタグは正確な内容を取得するのが困難で、見た目にも影響ないので省略しました。
ほかにもなくてもいいコードもありそうですが、一応忠実に再現しています。

24~26行目は最大幅の指定があったときにdivで囲ってmax-widthを指定するようにしています。
12行目で指定してもいいとは思いますが、埋め込みコード自体をあまりいじりたくないのでこのような仕組みにしてみました。

32行目以降のスクリプトは、ページ内でinstagramショートコードを複数使う場合でも1回読み込まれればいいので、別functionにしています。
最大幅のほかにキャプション有無も指定するようにしてもいいのですが、大概の場合キャプションはいらないのでは?と思い、今回は実装していません。

embedの関連記事

こちらの記事も合わせてどうぞ!

Webサイトにコンテンツを埋め込む「embed」機能。WordPressページが埋め込まれる場合、デフォルトでは本文の抜粋が表示されますが、これをメタディスクリプションに変更する方法をご紹介します。

Webサイトにコンテンツを埋め込む「embed」機能。せっかくのカッコいいリンクなのに、スマホで見るとはみ出ちゃう!…を解決する方法を紹介します。

WordPressで画像や説明も付いて別ウインドウで開く関連記事リンクを簡単に入れたい!をショートコードで実現する方法です。プラグインは不要です!

コメント

  1. へっぽこ より:

    はじめまして、こんにちは。
    Wordpressでページを作成していたら下書き保存にやたらと時間がかかるようになった。
    そのページを更新して見ようとしても明らかに時間がかかりまくる始末。
    今までとの違いは、今回初めてインスタを埋め込むということをしたのです。
    これのせいかと思って調べてみたら、インスタのURLを直にコピペしたのが原因でした。
    でもじゃあどうすれば良いのかと調べていたら、ここにたどり着いた次第です。

    ショートコードで埋め込めるなんて素敵すぎると思って使わせていただきました。ありがとうございました。

    ただ、キャプションを表示させたい時が出てきたので、調べてみたのですがなかなか答えが出てこなくて苦戦しております。
    もし可能でしたら、キャプション表示のさせ方を教えていただければ幸いです。

    1. ほんまそれ より:

      コメントありがとうございます。
      常時キャプションを表示させるなら、functions.php 10行目の

      $ret .= ‘<blockquote class="instagram-media" data-instgrm-version="7" ';

      $ret .= '<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="7" ';

      にしたらいけそうな気がしますが、試していないのでうまくいかなかったらすみません。
      余裕があればそのうちキャプション有無を切り替えられるコードも考えてみたいです。

  2. へっぽこ より:

    本当に遅くなってしまったのですが、ご回答ありがとうございました。
    ようやく触ることが出来て、「data-instgrm-captioned」の追記で表示されました。

    しかしよくよく見ると不可解なことがありまして。
    パソコンで見るとキャプションは最初から表示されるのに、
    スマホで見ると表示されておらず、再読み込みすると表示されるのです。

    ご提示いただいているソースは、キャプションなし前提のためのものだから?
    と思い、見ては見たものの、自分には何がおかしいのか全く分からず…

    お時間がある時にでも、再度ご教示いただければ幸いです。
    よろしくお願いいたします。

コメントを残す

*