タグ: カウント

  • 「この記事は~分で読めます」のコードがそもそも間違ってる説 & 導入している理由

    「この記事は~分で読めます」のコードがそもそも間違ってる説 & 導入している理由

    今村界では日本一有名だという今村だけがわかるブログさんの記事に完全に刺激を受けて書いています。

    是非・このブログの場合・そもそも論・ふわっとした感想で構成しました。

    巷に溢れる「~分で読めます」っていう WordPress 用のコードが間違ってるとぼくは思っていて。

    そもそも、前提条件である文字数がおかしいんじゃないのかな?

    是非から。

     

    「この記事は~分で読めます」を入れるかどうかの是非

    主観でいいんじゃないですか?

    入れたい人は入れればいい、入れたくない人は入れなくていい。

    自分のブログなんですから。

    誰にケチを付けられようと譲らない姿勢、嫌いじゃないです。

    ちなみにぼくは記事の日付と本文以外目に入らないタイプです。

     

    このブログの場合

    実はこっそり、「この記事はだいたい~分ぐらいで読めるよ」ってのを入れてます。

    文字数のところにさりげなく。

     

    なぜ入れるのか、その理由

    これに関しては webcre8 さんの記事、メタ情報としてって理由と似てます。

    読める時間は副次的な要素、むしろ、文字数を表記することが重要だと思っていて。

    なおかつ文字数をただのメタデータとしてではなく、構造化データマークアップに使えるというのが大きな理由。(※構造化データマークアップについては Google ウェブマスターのヘルプを参照されるといいかも

    ぼくの場合は microdata を使って記述。

    <article itemscope itemtype="http://schema.org/BlogPosting">
    	…
    	<meta itemprop="wordCount" content="xxxx" />
    	…
    	<span>x,xxx 文字</span>
    	…
    </article>

    ※デザインの都合上メタタグ

    構造化データマークアップをすることで、検索エンジンがサイトの情報を解釈しやすくなるんですねー。

    検索エンジンさんに記事の文字数をお知らせするついでに、ホバーアクションで読める時間を表示した、それが理由です。

     

    コードがそもそも間違ってる

    Google で “記事は~分で読めます” を検索して無作為にいくつか WordPress 用のコードが書いてあるのを見繕ってみました。

    だいたいにおいてこんな感じのコードでした。

    <?php
    /*
     * わかりやすいように処理をひとつずつ書いてます
     */
    
    global $post;
    // 投稿のコンテンツを取得
    $content = $post->post_content;
    // タグを除去
    $content = strip_tags( $content );
    // マルチバイトな文字列の長さを得る
    $content = mb_strlen( $content );
    // 600文字を1分で読める計算をする
    $read_count = round( $content / 600 ) + 1;
    ?>

     

    たとえば、キャプション付きの画像があるこんなページ。

    サンプル
    サンプル

    このキャプションだけのコンテンツを前述のコード途中、文字数を出力してみると、おや。

    91文字…
    91文字…

    なんと 91文字。

    これ、ぜったいウソですよね。

    ショートコードを省く処理が入ってないので、文字数が知らない間に水増しされるという…。

    ですから、「この記事は~分で読めます」を計算している文字数がそもそも違う。

    ギャラリーやプラグインのショートコードを使っている場合も上記に同じく。

    ちなみに執筆時点で、“分で読めます strip_shortcodes” の検索結果は皆無でした。

     

    おそらく、正しいコード

    ショートコードを省く処理を入れます。

    あと、空白も1文字としてカウントされるので、空白も消し去って文字数を取得してあげましょう。

    <?php
    global $post;
    // 投稿のコンテンツを取得
    $content = $post->post_content;
    // タグを除去
    $content = strip_tags( $content );
    // ショートコードを消し去る
    $content = strip_shortcodes( $content );
    // 空白文字列を消し去る
    $content = preg_replace( '/(\015\012)|(\015)|(\012)/', '', $content );
    // マルチバイトな文字列の長さを得る
    $word_count = mb_strlen( $content );
    // 600文字を1分で読める計算をする
    $read_count = round( $word_count / 600 ) + 1;
    ?>

    文字数がきちんとカウントされるはず。

     

    ホホまとめ

    ぼくが思う結論としましては、どんな情報であれ自分の中で精査・反芻できればベストだなーと。

    理由付け・考えるキッカケができるのでね。

    とはいえ、時間の制約・技術など限られたリソースをどこに割くかというのも悩みどころ。

    偉そうに書いてはいますが、自分への戒めが8割方であり。

    こうやって色々推敲するのは楽しいものですね。

    \この記事は2時間で書きました/