重要 2024年1月4日以降のドロップインのご利用につきまして

WordPressのバージョン4.2から追加された絵文字対応のスクリプトを無効化してソースコードからも非表示にする方法

こんにちは。コワーキングスペース7Fの星野邦敏です。

WordPressのバージョン4.2からMySQLの文字コードがutf8からutf8mb4に変わり、今のWordPressの仕様では、管理画面からバージョンアップも気軽に出来る中で、WordPressのデータベースの対応の文字コードが変わることで、仕様が少し変わったことに気が付かなかった人もいるかもしれません。

その中で、UTF8で4バイトになる漢字である第四水準漢字が使えるようになったり、絵文字にも対応されるようになりました。日本語のサイトにはあまり関係なさそうですが、この文字コードの変更によって象形文字などにも対応されたということになるようです。

参考URL
Emoji « WordPress Codex
WordPress › 日本語 « WordPress 4.2 “Powell”
WordPress 4.2 の拡張文字サポート | ja.naoko.cc

日本のいわゆるガラケー時代の絵文字文化が記憶にある人からしますと、今のタイミングでの絵文字対応に違和感があるかもしれませんが、これはプログラム実装の問題ではなくて、データの格納テーブルの文字コードの問題だと思います。

この結果、WordPressのバージョン4.2から絵文字対応のスクリプトが入り、ソースコードにも、例えば以下のようなソースコードがmetaの中に追加されるようになりました。

<script type="text/javascript">
			window._wpemojiSettings = {"baseUrl":"http:\/\/s.w.org\/images\/core\/emoji\/72x72\/","ext":".png","source":{"concatemoji":"http:\/\/(ここに自分のWebサイトのURL)\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.2.2"}};
			!function(a,b,c){function d(a){var c=b.createElement("canvas"),d=c.getContext&&c.getContext("2d");return d&&d.fillText?(d.textBaseline="top",d.font="600 32px Arial","flag"===a?(d.fillText(String.fromCharCode(55356,56812,55356,56807),0,0),c.toDataURL().length>3e3):(d.fillText(String.fromCharCode(55357,56835),0,0),0!==d.getImageData(16,16,1,1).data[0])):!1}function e(a){var c=b.createElement("script");c.src=a,c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g;c.supports={simple:d("simple"),flag:d("flag")},c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.simple&&c.supports.flag||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
		</script>
		<style type="text/css">
img.wp-smiley,
img.emoji {
	display: inline !important;
	border: none !important;
	box-shadow: none !important;
	height: 1em !important;
	width: 1em !important;
	margin: 0 .07em !important;
	vertical-align: -0.1em !important;
	background: none !important;
	padding: 0 !important;
}
</style>

ソースコードをチェックしていた時に、見覚えのないソースコードだったので、「あれか、今、流行りの改ざんか!」と一瞬ドキッとしたのですが、上記のソースコードが絵文字対応のソースコードとなります。

しかしながら、今まで運営していたWebサイトやブログによっては、そもそも絵文字を使わない、また、不必要なスクリプトが入ることで意図しないソースコードが表示されるのはちょっと、という人もいるかもしれません。

この時、WordPressのバージョン4.2から追加された絵文字対応のスクリプトを無効化してソースコードからも非表示にしたいという需要もあるようで、さっそく、このスクリプトを無効化するプラグインも公開されているようです。
WordPress › Disable Emojis « WordPress Plugins

ソースコードを見ると、とてもシンプルなプラグインで、テーマのfunctions.phpファイルに以下のソースコードを書いても同じ効果があると思います。

function disable_emojis() {
	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'wp_print_styles', 'print_emoji_styles' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );	
	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );	
	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
}
add_action( 'init', 'disable_emojis' );

WordPressのコアファイルに同梱されたスクリプトを無効化することで、将来的には何かしらあるかもしれませんし、有効化・無効化が切り替えやすいように「Disable Emojis」プラグインで対応しても良いかもしれませんね。