WordPressで記事ごとの文字数や、読むのにかかる推定時間を自動で表示したいというニーズは多くあります。読者にとって「この記事は何文字か」「読むのに何分かかるのか」が事前に分かることは、離脱率の低下やUXの向上にもつながります。この記事では、文字数と読み時間の計算処理をフロントと管理画面の両方に対応させる方法を紹介します。
文字数と読み時間を計算する関数の作成
まずは、記事本文の文字数を取得し、それをもとに読み時間を計算する関数を functions.php に追加します。
functions.php:文字数・読了時間の計算
function get_post_read_stats($post_id = null) {
$post_id = $post_id ? $post_id : get_the_ID();
$post = get_post($post_id);
if (!$post) {
return array('chars' => 0, 'minutes' => 0);
}
// ショートコード構文を除去してからタグを除去する
// (wp_strip_all_tags()はscript/styleタグの中身ごと除去するため安全)
$content = strip_shortcodes($post->post_content);
$content = wp_strip_all_tags($content);
$char_count = mb_strlen($content);
$chars_per_minute = 400; // 読書スピード(1分あたりの文字数)
$minutes = ceil($char_count / $chars_per_minute);
return array(
'chars' => $char_count,
'minutes' => $minutes,
);
}
この関数は、投稿の本文からショートコード構文とHTMLタグを除去して文字数を数え、400文字/分のスピードを基準に読み時間を算出しています。
strip_tags()だけでは正確な文字数にならない
PHPの
PHPの
strip_tags()はタグの記号だけを除去し、<script>・<style>タグの中身(JS/CSSのコード自体)はそのままテキストとして残ります。また投稿本文にはショートコード構文(等)もそのまま含まれており、読者が実際に読む文章ではないのに文字数としてカウントされてしまいます。strip_shortcodes()でショートコード構文を除去し、wp_strip_all_tags()(<script>/<style>ブロックを中身ごと除去してからstrip_tags()を呼ぶ、WordPress標準の安全な除去方法)でタグを除去することで、実際に読める文章量に近い文字数を算出できます。フロントエンドで表示する方法
上記の関数を使って、テーマ内で文字数や読み時間を表示するには、以下のように single.php や content.php などに追加します。
single.php:文字数・読了時間の表示
<?php $stats = get_post_read_stats(); echo '<p>文字数:' . esc_html($stats['chars']) . '文字 / 読了目安:約' . esc_html($stats['minutes']) . '分</p>'; ?>
このようにすることで、すべての投稿に自動的に「文字数」と「読み時間」を表示できます。
管理画面(投稿一覧)にも表示させる方法
投稿一覧に「文字数」や「読み時間」のカラムを追加するには、以下のコードを functions.php に追加します。
functions.php:投稿一覧へのカラム追加
// カラムを追加
add_filter('manage_post_posts_columns', function ($columns) {
$columns['read_time'] = '読了時間';
return $columns;
});
// カラムの内容を出力
add_action('manage_post_posts_custom_column', function ($column_name, $post_id) {
if ($column_name === 'read_time') {
$stats = get_post_read_stats($post_id);
echo esc_html($stats['minutes']) . '分 / ' . esc_html($stats['chars']) . '文字';
}
}, 10, 2);
これにより、管理画面の「投稿」一覧に、各投稿の読了目安時間と文字数が表示されます。
よくある質問(FAQ)
Q記事の読み取り時間を計算するPHPコードは?
A$content = get_the_content(); $word_count = mb_strlen(wp_strip_all_tags(strip_shortcodes($content))); $reading_time = max(1, round($word_count / 400));で計算できます。日本語は1分あたり400〜500文字が目安です。
Q読み取り時間を記事ページとアーカイブ一覧の両方に表示するには?
A関数化してfunctions.phpに追加します。function get_reading_time($post_id){ … }と定義して、single.php・archive.php等から呼び出します。
Q読み取り時間の計算にコードブロックや装飾を除外するには?
Awp_strip_all_tags()を使うとscript・styleタグの中身ごと安全にタグを除去できます(strip_tags()単体では中身が残ってしまいます)。ショートコードはstrip_shortcodes()で構文ごと除去します。
まとめ
WordPressでは、関数を少し追加するだけで、記事ごとの文字数や読了目安時間をフロントと管理画面の両方に表示することができます。読者にとっても運営者にとっても有益な情報になるため、ぜひ導入してみてください。
ただし、正確な文字数を算出するには、ショートコード構文やscript/styleタグの中身を正しく除去することが重要です。表示スタイルはCSSなどで調整することで、デザインに合わせた出力も可能です。

