タイトルを抜粋する

閲覧数: 24(0)

関連記事プラグインを使って、記事本文の下に「関連記事」を表示している。情報としては、タイトル、画像、投稿日、本文抜粋の順に表示しているところであるが、表示スペースが限られていることもあり、タイトルが長いと折返してしまい、パソコンで見た時、タイトルに押されて画像が横並びにならず、段がついてしまう。そこで、タイトルを折り返さない幅に省略してしまおうと言うのが、今回の課題である。英文のみのタイトルであれば、substr()関数で必要な長さに切り取ってくれるのであるが、タイトルに日本語が使われていると、単純にsubstr()で切り取れば良いわけではなくなってしまう。そこで登場するのがmb_substr()関数である。mb_の名の通り、マルチバイトでsubstr()出来る関数である。

タイトルが英文のみ、日本語のみの場合であれば、単純にタイトルの長さを比較することで何文字切り取るか決めることが出来るのであるが、混在しているとその比率が違ってくる。日本語寄りの切り取り長さにすると英文の時には短過ぎ、英語寄りに切り取り長さにすると日本語の時に長過ぎてしまう、ちょうど良いところを決める必要がある。

また、切り取りの長さと同じタイトル長さの時には、「…」を付加しないなど、細かい制御が必要になってくる。等々様々な制約を考慮した結果が以下のコードである。

    if ( strlen( $post_title ) > 40 ||  mb_strlen( $post_title ) > 19 ) {
        $title_aspect = strlen($post_title) / mb_strlen($post_title);
        if ( $title_aspect == 1 || $title_aspect < 1.8 ) {
            $post_title = mb_substr( $post_title, 0, 20 );
        } else {
            $post_title = mb_substr( $post_title, 0, 14 );
        }
        if ( $title_aspect < 1.8 || $title_aspect <= 3 ){
            $post_title = $post_title . '...';
        }
    }

まず、タイトルをstrlen()とmb_strlen()で長さを測る。英文のみであれば、どちらの結果も同じ長さになり、日本語のみであれば、strlen()の結果は、マルチバイトの長さに対して3倍の長さになる。混在していると3倍以下になる。日本語のみであれば20文字以上で抜粋処理に入る事になる。

抜粋処理では、英文のみの場合(比率が1)か、比率が1.8未満の場合には20文字で切り取り、それ以外のケースは14文字で切り取る。そして比率が3以下の時には「…」を付加しない、という設定である。

これで気兼ねなく長いタイトルを使うことが出来る。タグ「世界遺産」や「廃墟」、「攻略法」などで表示される記事を選ぶと、関連記事のコーナーでタイトルが省略されている状態を見ることが出来る。

カテゴリーIT閑話, 公開タグ, , ,
関連記事プラグイン

脆弱性のため公開中止となったプラグインの代わりに選んだ、現在の「関連記事」用プラグインの設定を保存し  続きを読む

子テーマ化詳細
blank

子テーマ化にあたって具体的に修正した部分の説明をします。まずは「header.php」から。サイトの  続きを読む

関連記事の大原則
blank

ググったりしてあるページにたどり着いた閲覧者に対して、それに関連する記事を提示して少しでもサイトの滞  続きを読む

プラグインの脆弱性
blank

トップページから記事を選択して個別のページへ飛んだ後、本文の下に関連記事を表示するために使用していた  続きを読む

関連記事
blank

Related Postsと言うプラグインで、関連記事をページ下部に表示しています。これまでは、Wo  続きを読む

テーマリニューアル2017
blank

すっかりご無沙汰してしまいました。 復帰記念に久しぶりにテーマを変更しました。今回使用するのは「ob  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください