質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1631閲覧

wordpressの記事アーカイブ一覧のタイトルを文字数制限したい

nonnon8.

総合スコア19

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/12/15 13:12

編集2018/12/16 03:35

index.phpに投稿記事のをアーカイブ表示するようにしています。
アーカイブ表示については、
イメージ説明

このような感じで、アーカイブ表示しています。
青文字のタイトルが15文字超えると、タイトルが2行で表示されて不恰好なので、15文字超えると「・・・」と表示するようにしたいです。

やりたいこと

  • タイトルの文字数制限 制限超えると「・・・」と表示
  • タイトルには記事のリンクがつくようにする

以下のコードをindex.phpに埋め込んでいます。

php

1<?php 2 if ( is_single() ) { 3 the_title( '<h1 class="entry-title">', '</h1>' ); 4 5 } else { 6 the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' ); 7 } 8 9?>

このコードで各記事のアーカイブ表示のタイトルを表示しているのですが、
このタイトルを文字数制限したいと考えています。
以下使用しようとしているコードです。

PHP

1<?php 2if (strlen($post->post_title) > 15) { 3   echo mb_substr(the_title($before = '<h1 class="entry-title">', $after = '</h1>', FALSE), 0, 15) . '...'; 4} else { 5   the_title(); 6} ?> 7

またはこのコード

PHP

1<?php 2if(mb_strlen($post->post_title, 'UTF-8')>15){ 3 $title= mb_substr($post->post_title, 0, 15, 'UTF-8'); 4 echo $title.'……'; 5}else{ 6 echo $post->post_title; 7} 8?>

タイトル前後にタグがつくように、the_title(before,after)を入れていますが、
これを使用しながら、文字数制限をかける方法がよくわかりません

以下、自分なりに組み合わせてみたのですが、上手くいきませんでした。

PHP

1<?php 2if ( is_single() ) { 3 if (strlen($post->post_title) > 15) { 4 echo mb_substr(the_title($before = '<h1 class="entry-title">', $after = '</h1>', FALSE), 0, 15) . '...'; } else { 5 the_title(); 6 } 7 8} else { 9 if (strlen($post->post_title) > 15) { 10 echo mb_substr(the_title($before = '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', $after = '</a></h2>', FALSE), 0, 15) . '...'; } else { 11 the_title(); 12 } 13 } 14?>

みにくくてすみません。
お手数ですが、よろしくお願いします。

対策①

頂いたコードをそのまま置き換えると以下のエラーが返ってきました。

PHP

1<?php 2if ( is_single() ) { 3 if ( strlen( get_the_title() ) > 15) { 4 echo '<h1 class="entry-title">'.mb_substr( get_the_title(), 0, 15).'...</h1>'; 5 } else { 6 the_title(); 7 } 8 9} else { 10 if ( strlen( get_the_title() ) > 15) { 11 echo '<h2 class="entry-title"><a href="'.esc_url( get_permalink() ).'" rel="bookmark">' 12 echo mb_substr( get_the_title(), 0, 15 ).'...'; 13 echo '</a></h2>'; 14 } else { 15 the_title(); 16 } 17} 18?>

Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in /home/・・・/template-parts/content-for-index.php on line 16

この16行目に相当するのは以下のコード部分です。

PHP

1echo mb_substr( get_the_title(), 0, 15 ).'...';

上手くインデントつけられなかったので、みにくいですが現状このような状態です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

回答ありがとうございました。
以下いただいたコードから解決方法です。

PHP

1<?php 2if ( is_single() ) { 3 if ( strlen( get_the_title() ) > 15) { 4 echo '<h1 class="entry-title">'.mb_substr( get_the_title(), 0, 15).'...</h1>'; 5 } else { 6 the_title(); 7 } 8 9} else { 10 if ( strlen( get_the_title() ) > 15) { 11 echo '<h2 class="entry-title"><a href="'.esc_url( get_permalink() ).'" rel="bookmark">'; 12 echo mb_substr( get_the_title(), 0, 15 ).'...'; 13 echo '</a></h2>'; 14 } else { 15 the_title(); 16 } 17} 18?>

セミコロンを付け忘れていただけでした。
解決しました。
15文字以下のものにも'・・・'がつくようになっていますが、
これ以降はちょっと自分で頑張ってみます。

今回get_the_titleがタイトル文字を返すのみの
wordpress用の関数として扱えることを知りました。

解決後の画像も載せておきます。
ありがとうございました^^

イメージ説明

投稿2018/12/16 03:45

nonnon8.

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

これでどうでしょう。

PHP

1<?php 2if ( is_single() ) { 3 if ( strlen( get_the_title() ) > 15) { 4 echo '<h1 class="entry-title">'.mb_substr( get_the_title(), 0, 15 ).'...</h1>'; 5 } else { 6 the_title(); 7 } 8 9} else { 10 if ( strlen( get_the_title() ) > 15) { 11 echo '<h2 class="entry-title"><a href="'.esc_url( get_permalink() ).'" rel="bookmark">' 12 echo mb_substr( get_the_title(), 0, 15 ).'...'; 13 echo '</a></h2>'; 14 } else { 15 the_title(); 16 } 17} 18?>

【the_title()とget_the_title()の違い | cly7796.net】
http://cly7796.net/wp/cms/difference-between-the-title-and-get-the-title/

投稿2018/12/15 13:41

kei344

総合スコア69458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonnon8.

2018/12/16 03:31

ありがとうございます^^ 早速試してみたのですが、エラーが出てアーカイブが表示されなくなりました。 補足に記載しています。
nonnon8.

2018/12/16 03:39 編集

すみません、’;’セミコロン?が15行目で入れ忘れていたので、試してみます。 ↓結果 できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問