WordPressで、ソースコードに出力されるHTMLのコメントアウトを削除する方法です。
1 | <!-- この部分を全て削除 --> |
プラグインが出力するコメントを削除したい場合や、
コメントアウト満載の、一部作成中のサイトを公開しなければならない
などの状況で使えるかなと考え作りました。
完成コード
以下のコードをテーマのfunctions.phpに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php // ++++++++++ 出力されるHTMLから余計なコメントアウトを削除 ++++++++++ function htmlFormat($buffer) { if (is_admin()) { return $buffer; } // htmlのコメントを除去 $buffer = preg_replace_callback( '/<!--[\s\S]*?-->/su', function ($matches) { if ( // 以下が含まれているコメントは削除しない strpos($matches[0], '{') !== false || strpos($matches[0], ';') !== false || strpos($matches[0], 'endif') !== false ) : return $matches[0]; else : return ''; endif; }, $buffer ); return $buffer; } function htmlFormat_start() { ob_start("htmlFormat"); } function htmlFormat_end() { ob_end_flush(); } add_action('after_setup_theme', 'htmlFormat_start'); add_action('shutdown', 'htmlFormat_end'); |
解説
特定の文字列を除外
strposで特定の文字列を含むコメントを削除しないようにします。
1 2 3 4 5 6 | if ( // 以下が含まれているコメントは削除しない strpos($matches[0], '{') !== false || strpos($matches[0], ';') !== false || strpos($matches[0], 'endif') !== false ) |
{ と ; は、<style>や<script>タグの中をHTMLコメントしたときに削除されないように。
(このテクニック、最近は使いませんが)
endif はIEを判定するコメントが削除されないようにしています。
IEを判定するコメント例
1 | <!--[if IE]><link rel="stylesheet" href="./assets/css/ie_style.css"><![endif]--> |
最終的なHTML出力を変更する
出力される前のHTML取得し、処理を実行します。
1 | function htmlFormat_start()
{
ob_start("htmlFormat");
}
function htmlFormat_end()
{
ob_end_flush();
}
add_action('after_setup_theme', 'htmlFormat_start');
add_action('shutdown', 'htmlFormat_end');
|
参考サイト:
同様のことが出来るプラグインでは、「Autoptimaize」がありますが、
こちらはコメントのみの削除ができず、minifyも同時に実行されてしまうため記事にしてみました。