WordPressで出力されるソース内のhtmlコメントを一括で削除する ( 特定のコメントは表示させることも可能 )

広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

html内のソースのコメントを削除するためのカスタマイズ。制作時にわかりやすくするためにコメントを残しますが閲覧する人にとっては不要な情報であり、ユーザーに見られたくない情報などが含まれる場合もあります。意味のあるコメントもあるため不要なコメントだけを一括で削除するテクニックです。

functions.php
/*----------------------------------------------------
 表示前にフックして出力テキストを置換する
----------------------------------------------------*/
if ( ! function_exists( 'final_processing_replace' ) ) {
    function final_processing_replace( $buffer ) {
        // IE判定用のコメントは除外してコメントを削除
        $buffer = preg_replace( '/<!--[^\[]*?-->/', '', $buffer );

        // 他にも処理したい内容がある場合はここに追加

        return $buffer;
    }

    // 表のページを出すときだけ始める(フィードなどは書き換えない)
    function buf_start() {
        if ( is_feed() || is_robots() || get_query_var( 'sitemap' ) ) {
            return;
        }
        ob_start( 'final_processing_replace' );
    }
    add_action( 'template_redirect', 'buf_start', 0 );
}

以前のコードは after_setup_theme でバッファを始めていたため、REST API の応答(ブロックエディターが記事を読み込むときのデータ)やフィードにも効いていました。ブロックエディターの記事では、ブロックの区切りのコメント(<!– wp:paragraph –> など)まで消え、そのまま保存するとブロックの情報が失われるおそれがありました。表のページだけで動く template_redirect に書き換えました(2026/10/18)。

IE判定用のコメントを考慮しない場合

// 全コメントを削除したい場合
$buffer = preg_replace('/<!--[\s\S]*?-->/','',$buffer);

出力前にフックして処理を実行という処理を複数定義して実行させるとエラーになる場合があるので他にも削除、置換したい処理がある場合は1つの処理内で複数記述を行うことをおすすめします。

htmlソースを確認して残したいコメント、表示したいコメントを確認

<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width">
<meta name="format-detection" content="telephone=no">

<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->

がソースの中で確認できて他のコメントが非表示になっていたら成功です。

IE用のコメントを除外しておくことで表示させたいコメントの制御が行えます

<!--[SIDE_START]-->~<!--[SIDE_END]-->

[]を使用するとコメントの削除対象にならないため表示させたいコメントを残すことが出来ます。意図的にスクレイピングしやすいようにといった時には上記のような対応を行う場合があります。

他にも処理したい内容の補足 ( タブ、改行の削除 )

functions.php
// 他にも処理したい内容がある場合はここに追加
$buffer = str_replace("\t",'',$buffer);       // タブ削除
$buffer = str_replace("\n\n","\n",$buffer);   // 2回改行を1回に変更

※ タブと改行を消す処理は、<pre>・<textarea>・インラインの JavaScript の中まで消すので、コードを載せるページではコードのインデントが崩れたり、JavaScript が動かなくなったりします。使う場合は、<pre> と <textarea> の中を先に取り出して、あとで戻す処理を足してください。

上記のように他にも整形したい内容があれば記述を追加します

WordPress Developer Resources

関連機能

  1. SiteGuard と CloudSecure を比べる:SiteGuard に統一し、ログインの URL の落とし穴も直した

  2. コメント機能を無効にする

  3. エックスサーバーの WAF をどこまでオンにするか:コードの記事を載せるサイトでの考え方

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP