WordPress から絵文字の機能を削除して効率化する

WordPress 4.2 から "絵文字" の機能が追加されました。 WordPress から出力されたページの HTML ソースに emoji の文字が確認できます。

絵文字の機能は、絵文字のための CSS と Javascript を読み込む処理と、絵文字を変換するための処理が加わります。 通信速度やページの描画速度に関わるので、特に絵文字を使わない場合には積極的に削除しましょう。ここでは削除方法を解説します。

emoji の機能が出力するコード

絵文字の機能が有効になっている場合、次のようなコードがページのヘッダ部分(head 要素)に挿入されます。

<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"http:\/\/s.w.org/images/core/emoji/72x72/",
…
</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>

emoji を削除する手順

emoji に関する機能はアクションまたはフィルタにフックされた関数によって実現されています。 したがって、remove_actionremove_filter 関数を使ってそれらの関数を削除します。 次のようなコードを functions.php ファイルなどに記述します。

絵文字などのデフォルトのアクションフックは、./wp-includes/default-filters.php ファイルで確認することができます。

remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
絵文字の機能を削除するコード(必須)

print_emoji_detection_script 関数の優先順位($priority)が 7 に設定されている点に注意してください。 remove_action 関数は、関数が追加されたときに指定された優先順位と、 削除するときに指定された優先順位が一致しないとき、削除に失敗します。

また、次のコードは状況に応じて追加します。

remove_action('admin_print_scripts', 'print_emoji_detection_script');
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');
絵文字の機能を削除するコード(状況に応じる)

状況に応じた関数の削除

functions.php ファイルはページの表示の度に読み込まれて実行されます。 つまり remove_action または remove_filter 関数を functions.php に追記すると、 絵文字機能の関数の削除がページの読み込みの度に実行されることになります。

一部の絵文字機能の関数については、ユーザに表示されるページには直接影響を及ぼさないので、ページの読み込みの度に削除することは非効率になります。

admin_print_scripts / admin_print_styles

admin_print_scriptsadmin_print_styles は、投稿ページなどではなく、 ログインしたユーザや管理者の走査するダッシュボードなどでスクリプトや CSS を読み込むためのアクションです。

WordPress を使った会員制サイトなどを作る場合には、これらのアクションにフックされた関数を削除した方が良いでしょう。 削除しない場合、ユーザが絵文字の機能を使うことができるにも関わらず、実際のページには出力されないといった状況が生まれます。 ユーザの意図と異なる結果は出力されるべきではありません。

一方で、個人や絵文字の機能を削除したことを理解してる限定的な数人で管理される WordPress なら、この機能を削除しなくても良いでしょう。 functions.php によってページの読み込みの度に削除する処理が実行されるものの、実際にはダッシュボードなどでしか機能しないためです。 ダッシュボードで使える機能を削除しても、ページを閲覧するユーザにはメリットがありません。単に削除が実行されるだけです。

the_content_feed / comment_text_rss

the_content_feedcomment_text_rss は、RSS(フィード)が出力するテキストに適用されるフィルタです。 また wp_staticize_emoji 関数は、絵文字を画像に変換する関数です。

RSS フィードを利用しているかどうかに関わらず、これらのフィルタにフックされた関数を削除する意味はあまりないでしょう。 もし削除するのであれば、RSS フィードを利用している場合に削除します。

RSS フィードの内容に対する処理は、ページを閲覧するユーザにはメリットがありません。単に削除が実行されるだけです。 RSS フィードの配信機能を無効化している場合には、尚更、削除する理由ないでしょう。そのような場合にも、単に削除が実行されるだけです。

wp_mail

wp_mail はメールによって投稿されたテキストに適用されるフィルタです。 wp_staticize_emoji_for_email 関数は、メールから投稿されたテキストに含まれる絵文字を画像に変換します。

この機能はメール投稿機能を使わない限り意味がありません。 削除しても、ページを閲覧するユーザにはメリットがありません。単に削除が実行されるだけです。

メール投稿機能を使い、絵文字機能を使わない場合には、wp_staticize_emoji_for_email 関数を削除しても良いです。 ただし、メール投稿機能を使うユーザが絵文字機能を使わないことを理解していれば、削除する必要はないでしょう。

管理ユーザがメールによって投稿する回数よりも、ユーザがページを閲覧する回数のほうが圧倒的に多いことは明らかです。 ページを閲覧する度に関数を削除するのはあまりにも非効率です。

Reference