タイトルを抜粋する

閲覧数: 42(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)タグ, , ,
超高速WEBサイト?

NGINXとHHVMを使った超高速WEBサイトを目指して新しいインスタンスを立てた今回の「引越」でし  続きを読む

今週のトップ10
blank

前回の「閲覧数を記録してみる」で記事の閲覧記録を取ることには成功しましたが、このプラグインでは細かい  続きを読む

ElasticPress 4.3
blank

ElasticPressは、WordPressでElasticsearchを使うためのプラグインとい  続きを読む

dockerとiptables
blank

クラウドサーバーを利用する場合、ファイアウォール(Firewalld/iptables)の設定に失敗  続きを読む

テーマ詳細
blank

今回使用したテーマは「oblique」です。日本語では「斜めの、斜め方向の、傾いた」という意味です。  続きを読む

PageSpeed Insights
blank

はGoogleが提供する「ウェブページのコンテンツを解析し、ページの読み込み時間を短くするための方法  続きを読む

スポンサーリンク

コメントを残す

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