WordPressのfunctions.phpでよく使うカスタマイズを、チェックボックスで選ぶだけで、コードをまとめて生成するWP-functions generatorをリニューアルしました。
そこで使っているコードの解説です。
WordPressのhead要素の余計なタグを削除して、軽量&安全にする方法まとめに続いて、今回はもう一歩踏み込んで、
- 絵文字(emoji)機能
- jQuery の読み込み
- REST API の制限
<title>(title-tag サポート)
といった「自動で読み込まれている機能」を、ちゃんと理解してから取捨選択する記事です。
前提:どこに書くコードなのか
すべて テーマ側の functions.php(できれば子テーマ) に書く想定です。
- パス例:
wp-content/themes/your-theme/functions.php - 子テーマを使っている場合:親テーマのアップデートで消えないように、子テーマ側に記述するのがおすすめです。
1. 絵文字(emoji)機能を無効化する
WordPress は、旧ブラウザでも絵文字を表示できるようにするため、
デフォルトで JS / CSS を head に読み込んでいます。
最近のブラウザ前提のサイトでは、不要なことが多く、軽量化のためにオフにするのが定番です。
やること
- 絵文字用の JS / CSS を削除
- SVG 絵文字の URL を無効化
コード(functions.php)
// 絵文字(emoji)機能を無効化
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' );
add_filter( 'emoji_svg_url', '__return_false' );
影響
- 絵文字を打ち込んだとしても、ブラウザが標準で表示できる範囲でそのまま表示されます。
- 古い IE など、かなりレガシーなブラウザ向けの互換対応を捨てる代わりに、
HTTPリクエストを数本減らすことができるイメージです。
通常の企業サイトやブログであれば、オフにして問題ないことが多いです。
2. jQuery の読み込みを最適化する
WordPress は、フロント側でも管理画面でも、標準で jquery を登録・読み込みできます。
- 「テーマもプラグインも、まったく jQuery を使っていない」 → 完全に外す選択肢あり
- 「jQuery は必要だけど、描画を少しでも早くしたい」 → フッターで読み込む
前提の注意
- 「完全に読み込まない」と「フッターに移動する」は、同時に有効にしないでください。
- どちらか一方を採用し、不要な方はコメントアウトする運用が安全です。
2-1. フロント側の jQuery を読み込まない
「本当にどこでも jQuery を使っていない」 場合だけにしてください。
jQuery を前提にしているプラグインやテーマがあると、普通に壊れます。
コード(functions.php)
// フロント側のデフォルト jQuery を読み込まない(管理画面はそのまま)
add_action( 'wp_enqueue_scripts', function () {
if ( ! is_admin() ) {
wp_deregister_script( 'jquery' );
}
} );
チェックポイント
- フロントでの HTML を確認し、
jquery.jsが読み込まれていないこと - コンソールエラー(
$ is not definedなど)が出ていないこと
2-2. jQuery をフッターで読み込む
jQuery を使うが、レンダリングをブロックされたくないときのパターンです。
コード(functions.php)
// jQuery をフッターで読み込む
add_action( 'wp_enqueue_scripts', function () {
if ( ! is_admin() ) {
wp_script_add_data( 'jquery', 'group', 1 );
}
} );
WordPress では、group = 1 を設定することで、wp_footer() 側で jQuery が読み込まれるようになります。
注意点
- フッターで読み込むと、「DOM構築前提のスクリプト」との相性が変わることがあります。
- jQuery に依存する自作スクリプトは、
jQuery(document).ready(...)などで DOM 準備後に実行するのが基本です。
3. REST API をログインユーザーのみに制限する
WordPress REST API は、投稿データなどを JSON で取得できる便利な機能ですが、
使わないサイトであれば、外部からのアクセスを制限したい場面もあります。
ここでは、**「ログインしているユーザーだけ REST API を使える」**ようにするコードです。
コード(functions.php)
// REST API をログインユーザーのみに制限
add_filter( 'rest_authentication_errors', function ( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error(
'rest_forbidden',
'REST API はログインユーザーのみ利用可能です。',
array( 'status' => 401 )
);
}
return $result;
} );
これでどうなるか
- 未ログインユーザーから
https://example.com/wp-json/wp/v2/postsなどにアクセスすると、
401エラー(認証エラー) が返るようになります。 - 管理画面にログインしているユーザーは、そのまま REST API を利用可能です。
注意点
REST API はいまや、ブロックエディタ(Gutenberg)やサイトヘルスなど、管理画面の内部でも多用されています。
- ブロックエディタを使っている
- フロント側で headless 的に REST を読んでいる
- プラグインが REST API を前提としている
こういった場合、このコードを有効にすると 機能が壊れる可能性が高いです。
- クラシックエディタ+REST非利用の単純サイト 向けの設定、と考えたほうが安全です。
4. <title> を WordPress に任せる(title-tag サポート)
古いテーマでは、header.php にこんなコードが書かれていることがあります。
<title>固定のサイトタイトル</title>
これだと、
- ページごとのタイトルが変わらない
- SEO プラグインのタイトル書き換え機能と競合する
といった問題が出ます。
そこで add_theme_support( 'title-tag' ); を使って、タイトル出力を WordPress に任せるのが現代的なやり方です。
コード(functions.php)
// title-tag サポートを有効にする
add_theme_support( 'title-tag' );
header.php 側の修正
<head> 内に 自分で書いている <title>〜</title> を削除します。
<head>
<!-- ここに <title>...</title> は書かない -->
<?php wp_head(); ?>
</head>
これで、
- 投稿タイトル
- アーカイブタイトル
- SEO プラグイン(All in One SEO / Yoast / SEO SIMPLE PACK など)
が、titleタグの中身を適切にコントロールできる状態になります。
5. まとめ
今回の内容を整理すると、以下のような方針になります。
| 機能 | やること | 向いているサイト |
|---|---|---|
| 絵文字(emoji) | JS/CSSを削除して軽量化 | 通常の企業サイト・ブログ |
| jQuery 削除 | wp_deregister_script('jquery') | 完全にjQuery非依存の静的寄りサイト |
| jQuery フッター読み込み | wp_script_add_data('jquery', 'group', 1) | jQueryは必要だが描画を少しでも早くしたい |
| REST API 制限 | 未ログインから REST を使わせない | クラシックエディタ中心・REST非利用 |
| title-tag サポート | add_theme_support('title-tag') | ほぼすべて(むしろ必須に近い) |
ポイントは、
- 「何をしているコードか」を理解したうえでオン/オフを決める
- 「全部盛り」ではなく、サイトの構成と運用方針に合わせて選ぶ
というところです。
