トップページ > ブログ > WordPress > WorsPressでソースの改行と空白を削除してサイト高速化

WorsPressでソースの改行と空白を削除してサイト高速化

サイト表示速度の高速化は、検索エンジンの評価にも大きく関わってきます。
ソース上の空白や改行などもファイルサイズに影響しますので、少しでもサイズを縮小することで改善につながるのが目的です。

WordPressであれば、表示する際に一括で削除することができますので、functions.phpにコードを追加するだけで対応が可能です。

また、WordPressはソースが汚い、インデントが揃っていなくて気持ち悪いと感じたことはありませんか?

そもそも削除してしまえば、気になることもなくなります。

Contents

functions.phpにコードを追加

今回のコードをすべて盛り込んだコードです。

after_setup_themeのフックで、テーマが読み込まれる際に改行コードと空白を削除します。

関数リファレンス/add theme support – WordPress Codex 日本語版


/**
 * 出力するソースの改行や空白を削除
 */
add_action('after_setup_theme', function() {
  ob_start("my_rep_br");
});

function my_rep_br($buffer) {

  //ログイン時は何もしない
  if(!current_user_can('level_10')) {
    return $buffer;
  }

  //管理画面なら何もしない
  if(is_admin()) {
    return $buffer;
  }

  //codeタグ内を保存
  preg_match_all( "/<code>(.*?)<\/code>/s", $buffer, $search );

  //行頭行末のスペース・タブ、及び改行だけの行を削除
  $buffer = preg_replace('/(^[\s\t]+|[\s\t]+$|^\n)/mu', '', $buffer);

  //HTMLタグ直後の改行を削除
  $buffer = preg_replace('/>\n/mu', '>', $buffer);

  //連続するスペース・タブを一つにまとめる
  $buffer = preg_replace('/[\s\t]{2,}/u', ' ', $buffer);

  //残りのすべての改行を削除
  $buffer = str_replace(array("\r", "\n"), '', $buffer);

  //すべての改行を削除した後に保存したコードに置換する
  $count = -1;
  $buffer = preg_replace_callback(
    '/<code>.*?<\/code>/s',
    function ($matches) use (&$count, &$search) {
      $count++;
      return $search[0][$count];
    },
    $buffer
  );

  return $buffer;

}

add_action('shutdown', function() {
  ob_end_flush();
});

ログイン時は改行を削除しない

ログインしているときは、デバッグのために改行が見えたほうが良いという方はこちらを追加しましょう。

関数リファレンス/is user logged in – WordPress Codex 日本語版

//ログイン時は何もしない
if(is_user_logged_in()) {
	return $buffer;
}

管理画面では改行を削除しない

管理画面では改行を削除する必要はないので、除外しましょう。

関数リファレンス/is admin – WordPress Codex 日本語版

//管理画面なら何もしない
if(is_admin()){
	return $buffer;
}

codeタグ内は改行を削除しない

ブログにソースコードを掲載している方は、ソースコードまで改行されてしまうと見づらくなってしまうので、codeタグ内は改行を消さないようにします。

codeの部分を書き換えれば、他のタグにも転用が可能です。

//codeタグ内を保存
preg_match_all( "/<code>(.*?)<\/code>/s", $buffer, $search );

//すべての改行を削除した後に保存したコードに置換する
$count = -1;
$buffer = preg_replace_callback(
	'/<code>.*?<\/code>/s',
	function ($matches) use (&$count, &$search) {
		$count++;
		return $search[0][$count];
	},
	$buffer
);

まとめ

たったこれだけでサイトの無駄な改行や空白が削除でき、サイトを高速化できます。

本来であれば一つ一つのファイルを整理したり、メンテナンスして軽量化していきたいところですが、なかなかそんな時間も取れないという方におすすめです。