制作会社から制作会社じゃない会社に転職が決まりました。 制作会社で学んだことを残らず記事にしたいと思います。

パンD KOTORI Blogの公式キャラクター「パンD」です。
コーディングPHP「the_excerpt()」をカスタマイズ[WordPress]

「the_excerpt()」をカスタマイズ[WordPress]

2014年02月17日WordPress 便利コード PHP 
「the_excerpt()」をカスタマイズ[WordPress]記事のアイキャッチ画像

WordPressの「the_excerpt()」が使いづらいのでカスタマイズしました。引数で表示する抜粋の文字数を指定できます。表示する抜粋の最後に付けるテキストを簡単に変更できます。特殊文字が中途半端に表示されたりしません。

まえがき

みなさん、WordPressの投稿記事の抜粋を表示する時はどうしてますか?
WordPress標準で用意されている「the_excerpt()」を使用するという方も多いのではないでしょうか。

「the_excerpt()」を簡単に説明します。
「the_excerpt()」は記事の抜粋を […](角括弧+三点リーダー)を最後に付けて表示します。記事編集画面の「抜粋」に何かしら入力があればそれを、入力が無ければ記事の本文から110文字(WP Multibyte Patchが有効な場合)を抜粋として出力します。

しかし、この「the_excerpt()」はそのままだと使いづらい!
というのも表示する抜粋の文字数や抜粋の最後に追加する文字列を簡単に編集することができないのです。
普通だったら関数の引数で設定できても良さそうなものなのですがね。

抜粋の文字数や抜粋の最後に追加する文字列は、シチュエーションによって結構かわってきますよね?
てか、変えたいですよね!?

さらにいうと、「the_excerpt()」は特殊文字( 等)も一文字づつカウントされるので、特殊文字が中途半端に切れた場合、抜粋が「○○○&nb」とか表示されることがあるのです笑

という事で「the_excerpt()」より遥かに使いやすく特殊文字も表示されないし追加する文字も簡単に変更できる、オリジナル関数を作りました。
functions.phpにコードを追加するだけなので試してみてください。

抜粋の文字数を引数で指定できる関数をfunctions.phpに追加する

以下のコードをfunctions.phpに追加してください!

function kotoriexcerpt($length) {
global $post;
$content = mb_substr(strip_tags($post->post_excerpt),0,$length);

if(!$content){
$content =  $post->post_content;
$content =  strip_shortcodes($content);
$content =  strip_tags($content);
$content =  str_replace(" ","",$content); 
$content =  html_entity_decode($content,ENT_QUOTES,"UTF-8");
$content =  mb_substr($content,0,$length);
}
return $content;
}

抜粋を表示したいところで下記のコードを書きます。
例えば抜粋を200文字表示したい場合

<?php echo kotoriexcerpt(200); ?>

解説していきます。
まず記事編集画面の「抜粋」に記入があるかどうかを判断します。
記入がある場合、「抜粋」のテキストが返ってきます。
記入がない場合は

  1. 「$content = $post->post_content」で記事の本文を取得
  2. 「strip_shortcodes($content)」で取得した本文からショートコードを取り除く
  3. 「strip_tags($content)」でHTMLタグを取り除く
  4. KoToRiの場合、クライアントが&nbsp;を本文中に使用していたため抜粋に変にスペースが入ってしまっていたため「str_replace(“&nbsp;”,””,$content)」で&nbsp;を削除しています。
    必要なければこの8行目は消してください。
  5. 「html_entity_decode($content,ENT_QUOTES,”UTF-8″)」で特殊文字が中途半端に抜粋に入ってこないように、本文中の特殊文字をデコードします。
  6. 「mb_substr($content,0,$length)」で本文から引数で指定した文字数だけ抜き出します。

抜粋の最後に追加する文字の指定

この「kotoriexcerpt()」関数は抜粋のテキストのみを返すので、最後に文字を追加したい場合は普通に追加するだけです。

<?php echo kotoriexcerpt(200); ?>...<a href="<?php the_permalink(); ?>">続きはここをクリックしてね</a>

こんな感じで指定するだけです。
簡単ですね。

まとめ

抜粋の使い方も色々ありますよね!

普通に記事編集画面の抜粋項目を使ったり
本文中に「more」クイックタグを挿入して「the_content()」タグで出力したり
普通に「the_excerpt()」使ったり。

その時々で対応は変わってくるかと思いますが「the_excerpt()」を普通に使うくらいなら
今回紹介した「kotoriexcerpt()」関数を是非利用してもらいたいと思います。

「kotoriexcerpt()」関数に関してなんか盲点があったら教えてください。

今回のこの記事はクライアントが本文にショートコードつかったり特殊文字使ったりと、あまり普通のお客様がしないようなことを色々なことをしてくれたお陰で誕生しました!
こういうの大事ですね!
ブログのネタも増えてマンセーです。
ありがとうございます。

シェアする みんなシェアしてね

フォローする フォローする

いつもKOTORI Blogをご覧いただきありがとうございます。Facebook、Twitterを通じて、皆様と交流していき色んな情報を共有していければな~と思ってます。お気軽に登録してください!

基本フォロー返します。

RSSを登録する

RSSはこちらから。

follow us in feedly

Feedly使ってる人はこちらから。

Buy me a Beer

動く!パンDのLINEスタンプ
好きな人にアプローチスタンプ
パンDのLINEスタンプ

関連する記事 関連する記事も読んでみてね

コメント

  • ryota

    わー!助かった―!ajaxで抜粋を読み込む時、the_excerpt()が動かなくなっちゃって困ってたんです。これだったら無駄なもの一切ついてこないので本当に楽になりました。使わせて頂きます。

    • kotoriblog

      ryotaさん
      コメントありがとうございます。
      お返事が大分遅れてしまいました。
      KoToRiもFacebookみたいな「続きを読む」機能を付けるときにうまく行かなくて試行錯誤の末辿り着いたコードです。
      使っていただけると本望です笑

  • Pingback: 「the_excerpt()」をカスタマイズ[WordPress]()

  • Pingback: TwitterカードをWPプラグイン無しでSTINGER5ブログに設定する方法 | ネットビジネスで起業して稼ぐ!30代妻子持ちが脱サラ田舎暮らし()

  • Pingback: 記事の抜粋を指定文字だけ取り出す 【WordPress】 | ブログ運営のためのブログカスタマイズ()

  • Pingback: STINGER5カスタマイズ7選!当サイトで行っていること | Info For Someone()

  • nakami

    こんにちは
     を消す記述を検索してたどり着きました。
    他の方の記事も見ましたが、kotoriさんの書き方が一番わかりやすく書き換えやすかったので使わせていただきました。
    抜粋の記述法まで変えるつもりはなかったのですが、 処理とともにいっぺんにできて良かったです。
    以前カスタム投稿タイプなどの記事もすごく参考にさせていただきました。
    kotoriさんの記事は、これが知りたかった!ということが1つ1つ詳しくまとめてあって、すごくわかりやすいです。
    ありがとうございました。

    • kotoriblog

      nakamiさん
      コメントありがとうございます。
      そして嬉しいお言葉ありがとうございます!!
      これからも頑張ります☆

  • yu

    KoToRiさん初めまして。

    the_excerpt();の長さをフィルターフックしてしまうとブログ全体で動きが変わってしまうので、引数で文字数変えてる人いるんじゃないかと思って探したらいらっしゃいました!w
    すっきりしていていいですね。

    これ、ついでに「続きを読む」もfunction内に入れていないのは理由があるのでしょうか?
    最後、return $content;のところを追加して、下記のようにしてしまったほうが楽なんじゃないかと思ったんですが‥。

    echo '' . $content . ' …' . '<a href="続きを読む';

    何か理由があるのであれば、ぜひご教示いただけると嬉しいです!