YouTubeやってます!
Categories技術家庭科

Flickrの埋め込みコードのFancyな機能を削除するWordPressのプラグインを書いた

Date 2016/02/01 21:23  Modified date 2016/05/11 Author Yutaka  Tags plugin WordPress 作ってみた 情報処理
icoro snowpark 2016

 Flickrの埋め込みコードからjavascriptの要素を取り除くプラグインを書きました。

 昨年の夏頃、なんの前触れもなくFlickrのEmbed(埋め込み)コードが変わり、埋め込んだ画像にヘッダ/フッタが表示されたりする「Fancy」な機能が追加されるようになりました。Flickrの開発者はこれがイケてると思っているようですが、Flickrのフォーラムが軽く炎上する程度には「こんなんいらんわ」と思っている保守派の人も多いようです。かくいう私も「こんなんいらんわ」と思ってる保守派でね。

Flickr Embed
HeaderやらFooterやらの表示に関する設定はここでできるが、機能を完全にOFFるにはコードを直接いじるしかない。

 そして、それから半年以上が経っても従来型のコードが提供される様子はなく。「まあ、しばらく待ってればFancyじゃない従来のコードも提供されるだろう」と気長に待っていたハト派の私もさすがに痺れを切らして、このFancy(つーかFu○kin’)な埋め込みコードを従来のstandardなコードに変換するプラグインを書いちゃいました。

 最近のWordPressはURL貼り付ければ画像を取得してくれるのは知っていますが、画像はfigureタグで囲みたい&自動変換あんまり信じられない保守ハト派なもので。WYSWYGエディタ? 知らない子ですね。

手動でスタンダードな表示にする方法

 と、その前にまずは手動でFancyをOFFる方法。以下はFlickrで取得出来る埋め込み用コードの例です。

<a data-flickr-embed="true"  href="https://www.flickr.com/photos/35962451@N04/24386679580/in/album-72157663883429312/" title="icoro snowpark 2016"><img src="https://farm2.staticflickr.com/1457/24386679580_6de6f7e22a.jpg" width="500" height="332" alt="icoro snowpark 2016"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>

 このコードを改変してFancyな機能を完全にOFFる方法は以下の3通りです。このうちどれかを行えば沈黙させることができます。

  1. data-flickr-embedの値をfalseにする
  2. 「data-flickr-embed=”true”」自体を削除する
  3. scriptタグを削除する

 中でも最も罪深いのはscriptタグの存在なので、この中でどれかひとつをあげろと言われたら3番目の「scriptタグの削除」をあげます。

 そんなこんなで、クリーニングした埋め込みコードは以下の通り。

<a href="https://www.flickr.com/photos/35962451@N04/24386679580/in/album-72157663883429312/" title="icoro snowpark 2016"><img src="https://farm2.staticflickr.com/1457/24386679580_6de6f7e22a.jpg" width="500" height="332" alt="icoro snowpark 2016"></a>

プラグインのコード

 上記の作業を自動化するプラグインのコードが以下です。これをテキストエディタかなんかにコピペして適当な名前で保存し、WordPressのプラグインフォルダにつっこんで使ってください。もしくは、関数をテーマのfunction.phpにコピペしてください。

<?php
/*
Plugin Name: icoro Delete Flickr Javascript
Plugin URI: http://www.icoro.com/
Description: No more fancy!
Version: 1.0
Author: OKAMOTO Yutaka
*/
function delete_flickr_javascript($data, $postarr) {
  $pattern = '/<a data-flickr-embed=\\\"true\\\"[ ]+([\s\S]+?)<script async src=\\\"\/\/embedr\.flickr\.com\/assets\/client-code\.js\\\" charset=\\\"utf-8\\\"><\/script>/';
  $replace = '<a $1';
  $data['post_content'] = preg_replace($pattern, $replace, $data['post_content']);
  return $data;
}
add_filter('wp_insert_post_data', 'delete_flickr_javascript', '99', 2);
?>

 このプラグインを有効化すると、記事の投稿/更新時に記事内にあるFlickr由来のscriptタグをすべて削除します。
 要は記事中のflickr部分を検索置換してるだけです。投稿時に自動的に記事の中身を書き換えたいときとかにも応用出来ると思います。

 今のところ、うちでは不具合はありませんが、予期せぬ不具合が生じるかもしれません。ノークレーム・ノーリターンでお願いします。

参考

サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

  • 著者/訳者:宮内 隆行 西川 伸一 岡本 渉 三好 隆之
  • 出版社:SBクリエイティブ ( 2014-07-19 )
  • 単行本:434 ページ
Back to Top