WordPress+PHPで自動速度計測を作る方法【投稿ページ限定】
目次
この記事では、WordPress+PHPで、**投稿ページのみ**に「ページ表示速度を自動計測して出力する仕組み」を実装する手順をご紹介します。固定ページやアーカイブ、カテゴリー等には影響せず、投稿ページだけに限定して計測が走るようにします。
1 実装のポイント
ポイントを整理すると下記の通りです。
- 投稿ページかどうか(`is_single()`など)を判定する。
- 計測開始・終了タイミングをPHPで取得(例:`microtime(true)`)。
- 出力タイミングを適切に(例:`wp_footer`フックなど)行う。
- 固定ページ、アーカイブ、カテゴリー、タグ一覧などでは実行されないように条件分岐する。
- スマホ、タブレットでは非表示にしています。
2 functions.php にコードを追加
//-------------------------------------------
// 投稿ページのみ速度計測を行う処理
//-------------------------------------------
add_action( 'wp', 'my_speed_measure_start' );
function my_speed_measure_start() {
if ( is_single() && 'post' === get_post_type() ) {
global $my_speed_start_time;
$my_speed_start_time = microtime( true );
}
}
add_action( 'shutdown', 'my_speed_measure_end' );
function my_speed_measure_end() {
if ( is_single() && 'post' === get_post_type() ) {
global $my_speed_start_time;
if ( empty( $my_speed_start_time ) ) return;
$elapsed = microtime( true ) - $my_speed_start_time;
$elapsed = number_format( $elapsed, 3 );
// バックスラッシュを一切使わない
echo '<div class="page-speed-report">Page生成時間:' . $elapsed . '秒</div>';
}
}
補足:
- `is_single()` と `get_post_type()` の組み合わせで「投稿記事ページのみ」を判定しています。
- テーマやプラグインによっては `shutdown` フックが早めに出力されるケースがあります。必要に応じて `wp_footer` 等に変更可能です。
- 表示位置やスタイルを変えたい場合は CSS を別途追加してください。
3 javascript にコードを追加
サーバー側だけで計測しているため、特に JavaScript 計測は必須ではありませんが、クライアント側(ブラウザ)でのロード完了時間を取得したい場合には、以下のように追加できます。
ファイル名:page-speed.js
保存先:wp-content/themes/child-theme/js/page-speed.js
//-------------------------------------------
// 投稿ページのみ速度計測を行う処理
//-------------------------------------------
document.addEventListener('DOMContentLoaded', function(){
var t = (performance.timing.loadEventEnd - performance.timing.navigationStart) / 1000;
var el = document.createElement('div');
el.className = 'client-speed-report';
el.textContent = 'ブラウザロード時間:' + t.toFixed(3) + '秒';
document.body.appendChild(el);
});
このスクリプトを出力したい場合は、先の PHP の `echo` 部分に `` を追記しても構いません。
3.1 ディレクトリ構造
- child-theme/
- archive.php
- category.php
- functions.php
- footer.php
- header.php
- style.css
- js/
- page-speed.js
4 汎用CSS
速度計測結果を目立たせつつも過度にならないよう、以下 CSS をテーマの CSS ファイルや「追加 CSS」へ記述してください。
/* -----------------------------------------------------
* 投稿ページのみ速度計測を行う処理
* ----------------------------------------------------- */
.page-speed-report,
.client-speed-report {
position: fixed; /* 固定配置 */
left: 50%; /* 横中央 */
transform: translateX(-50%); /* 中央に正確配置 */
background: #ffffff; /* 背景白 */
color: #000; /* 黒文字 */
border: 1px solid #ccc; /* 枠線 */
padding: 6px 12px; /* 余白 */
border-radius: 6px; /* 角丸 */
font-size: 14px; /* 読みやすいサイズ */
box-shadow: 0 3px 6px rgba(0,0,0,0.2);
z-index: 9999; /* 最前面 */
text-align: center; /* テキスト中央寄せ */
}
/* 位置を少しずらして2段に並べる */
.page-speed-report {
bottom: 10px; /* 下側(PHP測定) */
}
.client-speed-report {
bottom: 40px; /* 上側(JS測定) */
}
/* ----------------------------
* スマホでは非表示(幅768px以下)
* --------------------------*/
@media screen and (max-width: 1024px) {
.page-speed-report,
.client-speed-report {
display: none; /* 非表示 */
}
}
5 完成イメージ

6 代用プラグイン
自作コードではなくプラグインで済ませたい場合、例えば以下が参考になります:
- Query Monitor – WordPress のページ生成時間/メモリ使用量等を管理画面で確認可能。
- Performance Lab – サーバー側計測に対応したモジュールを含みます。:contentReference[oaicite:4]{index=4}
ただし、プラグインでは投稿ページに限定してのみ出力、という細かい条件設定ができないケースもあるため、自作コードのほうが柔軟です。
7 まとめ
投稿ページにだけ「生成時間を自動表示」する仕組みを、WordPress + PHP で簡単に実装できます。functions.php に条件付きで処理を追加することで、固定ページやカテゴリー、タグアーカイブなどには影響を与えずに導入可能です。
表示スタイルやクライアント側計測まで拡張すれば、さらにユーザー体験の改善にも役立ちます。ぜひ自分のテーマに合わせてカスタマイズしてみてください。

