【WordPress】「記事を読む時間の目安」を複数ページの場合は全ページ分の時間にする方法

time- to-read WordPress
この記事は約7分で読めます。

WordPressの無料テーマ「Cocoon」(コクーン)最高ですよね。Cocoonでは「記事を読む時間の目安」を簡単に表示することができます。この記事でも上に出ていますね。
しかし、記事が長くなったりして「ページ区切り」を入れ、マルチページ(複数ページ)にした場合、この「記事を読む時間の目安」は各ページごとの読む時間の目安が表示されます。
例えば、全ページを読む時間の目安が「12分」の記事があったとして、これに「ページ区切り」を入れて3ページにすると、各ページに「記事を読む時間の目安」が1ページ目「4分」、2ページ目「3分」、3ページ目「5分」みたいに表示されます(合計「12分」)。考え方として、リンクが貼られたり、検索されたりする単位がページ単位だったりするので、記事単位ではなく、ページ単位として、そのページで情報(今回で言えば「読む時間の目安」)が完結するようにしているのでしょう(「目次」もそのような考え方にそっていますね)。
今回は、その考え方には反してしまうのですが、Cocoonの「記事を読む時間の目安」をマルチページ(複数ページ)の場合は1ページ目に全ページ分の時間を表示する方法です。

Cocoonの「記事を読む時間の目安」の関数

まずは「記事を読む時間の目安」がどのように計算されているか、みてみましょう。
※ここには何も手は加えません。「記事を読む時間の目安」の仕組みの理解の為に説明します。

//本文を読むのにかかる時間
if ( !function_exists( 'get_time_to_content_read' ) ):
function get_time_to_content_read($content){
 $count = mb_strlen(strip_tags($content));
 if ($count == 0) {
 return 0;
 }
 $minutes = floor($count / 600) + 1;
 return $minutes;
}
endif;

get_time_to_content_readという関数ですね。記事のページで使うとすると、記事全体(=$content)から、strip_tags関数でタグを取り除き、文字だけにしてmb_strlen関数で文字数を取得しています。で、その文字数が$countに入ります。次に文字数がゼロじゃない時に、文字数を600で割って($count / 600)、小数点以下の端数を切り捨て(floor関数)、1を足しています。そして、その計算結果を$minutesに入れて、この関数の結果(=この記事を読む時間の目安(単位:分))として出力します。
文字数を600で割っているのは「読む時間の速さを1分間に600文字」と設定しているということです。1を足しているのは、小数点以下の端数を切り捨てているので、1を足して切り上げと同じ結果にしています(従って、最低でも1(分)以上となります。また、Ceil関数という切り上げの関数もあるのですが、あえてfloor関数を使ってから1を足しているのは、何か意味があるのだと思います。把握しておらず、すみません)。

Cocoonの子テーマのcontent.phpを編集する

では、実際に編集していきます。content.phpを編集します。Cocoonの子テーマに、もともと無いので、親テーマのtemp>content.phpをコピーして(FTPソフトやレンタルサーバーのファイルマネージャーでできます)、その子テーマのcontent.phpを編集します。
97行目~100行目が記事を読む時間を表示させるコードが書かれている部分です。

<?php if (is_content_read_time_visible() && is_the_page_read_time_visible() && !is_plugin_fourm_page()): ?>
 <div class="read-time"><?php echo '<span class="fa fa-hourglass-half" aria-hidden="true"></span>
'.sprintf(__( 'この記事は<span class="bold">約%s分</span>で読めます。', THEME_NAME ), get_time_to_content_read(get_the_content())); ?></div>
<?php endif; ?>

この部分を以下のように編集します。二箇所です。

①97行目の「!is_plugin_fourm_page()」の次に「&&」を付けて

!is_paged()

を追加します。この「is_paged()」は2ページ目以降かどうかを判定するものですが、今回の記事を読む時間は2ページ目以降に表示させないので、!を付けて2ページ目以降ではない時、つまり1ページ目で表示させる為にこのコードを追加しています。

②99行目

get_post()->post_content

先ほど、内容を確認したget_time_to_content_read関数の()内の「get_the_content()」を「get_post()->post_content」に置き換えます。これは「get_the_content()」だと「ページ区切り」を入れてマルチページ(複数ページ)にしたページだと、分割された各ページの内容が関数に入ってしまいます。そこで「get_post()->post_content」に置き換えて分割前の全ページの内容を関数に入れてやります。
そうすると下記のようになり、これで「記事を読む時間の目安」がマルチページ(複数ページ)の場合は1ページ目に全ページ分の時間が表示されます。

<?php if (is_content_read_time_visible() && is_the_page_read_time_visible() && !is_plugin_fourm_page() && !is_paged()): ?>
<div class="read-time"><?php echo '<span class="fa fa-hourglass-half" aria-hidden="true"></span>
'.sprintf(__( 'この記事は<span class="bold">約%s分</span>で読めます。', THEME_NAME ), get_time_to_content_read(get_post()->post_content)); ?></div>
<?php endif; ?>

ちなみに、上記のようにソースコード表示の行番号を途中からの番号にする方法はこちらの記事をご覧ください。

まとめ

以上がCocoon(コクーン)の「記事を読む時間の目安」をマルチページ(複数ページ)の場合は1ページ目に全ページ分の時間を表示する方法です。子テーマのcontent.phpの二箇所を編集するだけなので簡単です。ページ単位ではなく、記事単位で考えたい方におすすめします。
下記の記事は2ページですが、この方法で1ページ目に全ページ分の時間を表示しています。

また、↑この記事の目次は「全ページ分を全ページに表示」させていますので、その部分もご参考までにご覧ください。
複数ページに分割された記事で、全ページ分の目次を全ページに表示させる方法の記事はこちらからどうぞ。

最後迄、お読みいただき、ありがとうございました!

コメント

タイトルとURLをコピーしました