WordPress

【保存版】functions.phpで削除しておきたいWordPressの不要コードまとめ【コピペOK】

スポンサーリンク

WordPressは初期状態でも非常に高機能なCMSですが、デフォルトのままだとセキュリティや表示速度、ソースコードの最適化という観点から不要なコードが多数出力されています。

特にテーマのfunctions.phpを編集することで、こうした不要な出力を簡単に制御できます。

本記事では、functions.phpに追加しておきたい「削除系」のコードをカテゴリごとに整理し、その意味や注意点、公式ドキュメントへのリンク付きでわかりやすく解説します。


WordPressデフォルト出力の削除とその理由

以下では、functions.phpで無効化しておきたい代表的なコードとその理由をカテゴリ別に紹介します。

セキュリティに関するコードの削除

generator

WordPressではデフォルトで以下のようなmetaタグが出力されます。

<meta name="generator" content="WordPress 6.5.3" />

これにより使用しているWordPressのバージョンが外部から簡単に判別できるため、セキュリティ上の観点から削除を推奨します。

remove_action('wp_head', 'wp_generator');

EditURI

WordPressでは外部投稿ツールとの連携のために以下のようなlinkタグを出力します。

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://example.com/xmlrpc.php?rsd" />

通常の運用で不要な場合がほとんどです。

remove_action('wp_head', 'rsd_link');

wlwmanifest

WordPressではWindows Live Writer用の設定ファイルwlwmanifest.xmlへのlinkタグが出力されます。

<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://example.com/wp-includes/wlwmanifest.xml" />

使っていない場合は削除して問題ありません。

remove_action('wp_head', 'wlwmanifest_link');

REST APIのユーザー情報取得制限

WordPressのREST APIは /wp-json/wp/v2/users でユーザー名を取得できてしまうため、これを制限します。

add_filter('rest_endpoints', function($endpoints){
  if (isset($endpoints['/wp/v2/users'])) {
    unset($endpoints['/wp/v2/users']);
  }
  return $endpoints;
});

このコードは投稿取得など他のREST APIには影響しませんが、APIを使うプラグインを導入している場合は注意しましょう。

ログインエラーの内容非表示

WordPressではログイン失敗時、以下のようなメッセージが表示されます:

  • 「無効なユーザー名です」
  • 「パスワードが間違っています」

ログイン失敗時に具体的な理由が表示されてしまうため、内容を非表示にします。

add_filter('login_errors', function(){
  return 'ログイン情報が正しくありません。';
});

XML-RPCの無効化

WordPressはXML-RPCという古い通信方式をサポートしており、初期状態では有効です。
この機能を使うと外部ツールから投稿できますが、現在はREST APIに置き換えられつつあります。

ブルートフォース攻撃対象になることが多いため、使用しない場合は無効化します。

add_filter('xmlrpc_enabled', '__return_false');

高速化・軽量化のためのコード

絵文字用JS/CSSの削除

WordPressではデフォルトで絵文字表示用のJS/CSSが読み込まれます。
不要な場合は削除できます。

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');

JS・CSSの「?ver=~」を削除

WordPressは読み込むCSSやJSにバージョンをクエリ文字列で付けます(例:style.css?ver=6.5.3)。
これを削除してキャッシュを安定させることも可能です。

バージョン情報をURLから削除し、キャッシュ制御の強化やバージョン漏洩防止に役立ちます。

function vc_remove_wp_ver_css_js($src) {
    if (strpos($src, 'ver=' . get_bloginfo('version'))) {
        $src = remove_query_arg('ver', $src);
    }
    return $src;
}
add_filter('style_loader_src', 'vc_remove_wp_ver_css_js', 9999);
add_filter('script_loader_src', 'vc_remove_wp_ver_css_js', 9999);

このコードを使うと、ファイルの更新後にキャッシュが切り替わらないことがあります。開発環境やCDNを使用している場合は慎重に導入しましょう。

rel=”next”/”prev”の削除

以前はページネーションのSEO効果として有効とされていましたが、Googleは2019年にサポート終了を発表しました。

remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');

shortlinkの削除

WordPressは <link rel="shortlink"> を出力します。短縮URLを使わない場合は削除可能です。

remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);

表示最適化のためのコード

oEmbed関連の削除

外部コンテンツ埋め込み用のスクリプトを無効化します。

remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
remove_filter('the_content', [$GLOBALS['wp_embed'], 'autoembed'], 8);

自動整形機能(wpautop)の無効化

<p>タグなどを自動挿入する機能を無効化します。テーマによってはレイアウト崩れの原因になるので注意。

remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

テーマによってはレイアウトが崩れる原因になる場合があります。事前に表示の影響を確認してから導入しましょう。


【コピペOK】functions.phpに書くコードまとめ

セキュリティ関連のまとめコード

// generator(WordPressバージョンの非表示)
remove_action('wp_head', 'wp_generator');

// EditURI(外部投稿ツール用タグの削除)
remove_action('wp_head', 'rsd_link');

// wlwmanifest(外部投稿ツール用タグの削除)
remove_action('wp_head', 'wlwmanifest_link');

// REST APIでのユーザー情報非表示
add_filter('rest_endpoints', function($endpoints){
  if (isset($endpoints['/wp/v2/users'])) unset($endpoints['/wp/v2/users']);
  return $endpoints;
});

// ログインエラーメッセージの非表示
add_filter('login_errors', function(){ return 'ログイン情報が正しくありません。'; });

// XML-RPCの無効化
add_filter('xmlrpc_enabled', '__return_false');

高速化・軽量化のまとめコード

// 絵文字用のJS・CSSを削除
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');

// JS・CSSの「?ver=〜」を削除してキャッシュ対策
function remove_wp_ver_css_js($src) {
  if (strpos($src, 'ver=')) {
    $src = remove_query_arg('ver', $src);
  }
  return $src;
}
add_filter('style_loader_src', 'remove_wp_ver_css_js', 9999);
add_filter('script_loader_src', 'remove_wp_ver_css_js', 9999);

// rel="next"・"prev"リンクの削除
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');

// shortlinkタグの削除
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);

表示最適化のまとめコード

// oEmbedの自動読み込みを無効化
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
remove_filter('the_content', [$GLOBALS['wp_embed'], 'autoembed'], 8);

// 自動整形機能(wpautop)の無効化
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

すべてまとめた統合コード(1ファイル形式)

セキュリティ、高速化、最適化すべて含んだ統合コードを以下に記載します。

// 【セキュリティ系】
// generator(WordPressバージョンの非表示)
remove_action('wp_head', 'wp_generator');

// EditURI(外部投稿ツール用タグの削除)
remove_action('wp_head', 'rsd_link');

// wlwmanifest(外部投稿ツール用タグの削除)
remove_action('wp_head', 'wlwmanifest_link');

// REST APIでのユーザー情報非表示
add_filter('rest_endpoints', function($endpoints){
  if (isset($endpoints['/wp/v2/users'])) unset($endpoints['/wp/v2/users']);
  return $endpoints;
});

// ログインエラーメッセージの非表示
add_filter('login_errors', function(){ return 'ログイン情報が正しくありません。'; });

// XML-RPCの無効化
add_filter('xmlrpc_enabled', '__return_false');

// 【絵文字・バージョン・リンク削除】
// 絵文字用のJS・CSSを削除
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');

// JS・CSSの「?ver=〜」を削除してキャッシュ対策
function vc_remove_wp_ver_css_js($src) {
    if (strpos($src, 'ver=' . get_bloginfo('version'))) {
        $src = remove_query_arg('ver', $src);
    }
    return $src;
}
add_filter('style_loader_src', 'vc_remove_wp_ver_css_js', 9999);
add_filter('script_loader_src', 'vc_remove_wp_ver_css_js', 9999);

// rel="next"・"prev"リンクの削除
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');

// shortlinkタグの削除
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);

// 【oEmbed・整形機能】
// oEmbedの自動読み込みを無効化
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
remove_filter('the_content', [$GLOBALS['wp_embed'], 'autoembed'], 8);

// 自動整形機能(wpautop)の無効化
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

よくある質問(FAQ)

Q
functions.phpが読み込まれない・エラーになる原因は?
A

主な原因は、PHPの構文エラー(セミコロンの付け忘れやカッコの不整合)です。構文ミスがあると、サイトが真っ白になったり、500エラーになることがあります。編集前にはバックアップを必ず取り、エラー時はFTPやサーバー管理画面から修正または復元してください。

Q
子テーマを使っていないけど大丈夫?
A

親テーマのfunctions.phpに直接コードを書くのは推奨されません。
テーマを更新すると変更が上書きされて消えてしまうからです。
WordPressでは子テーマを作成してfunctions.phpに記述する方法が安全であり、メンテナンス性や保守性も高くなります。

Q
すでに書いてあるfunctions.phpに追記してもいいの?
A

はい、追記しても問題ありません
ただし、<?php の開始タグがすでにある場合は 繰り返し書かないよう注意してください。コード同士の区切りには改行を入れると可読性が上がり、エラー防止にもなります。

Q
上記のコードはすべて入れた方が良いのですか?
A

必要に応じて選んで導入してください。使用中のテーマやプラグインによっては、意図しない不具合が出る可能性があります。


まとめ

WordPressは非常に柔軟性の高いCMSである一方で、初期状態のままだと不要なタグやスクリプト、セキュリティ的に注意すべき要素が多数含まれています。
特にfunctions.phpを活用することで、これらの不要なコードを簡単に無効化・削除することができ、表示速度の向上やセキュリティ強化にもつながります。

この記事で紹介したコードはすべて、WordPressの標準機能によって出力される要素に対して、必要に応じてカスタマイズ・削除するための方法です。
ただし、導入にあたってはテーマや使用中のプラグインとの相性にも注意し、適用後はサイトの表示や機能が意図通りに動作しているかをしっかりと確認するようにしましょう。

特に初心者の方は、functions.phpに直接編集を加える前に、必ずバックアップを取るか、子テーマを使用して安全にカスタマイズを行うことをおすすめします。
正しく管理すれば、functions.phpはサイトを軽快かつ安全に保つ非常に強力なツールになります。

タイトルとURLをコピーしました