WordPressの抜粋(get_the_excerpt)で任意の記事の抜粋を表示したい
WordPressには記事の抜粋を表示してくれるthe_excerpt()
やget_the_excerpt()
という便利な関数があります。
しかし、この関数はグローバルの$post
に入っている抜粋を出力する仕様になっており、任意の記事の抜粋を表示させることはできません。使用する場所もループ内となっています。
今回は、記事内で他の記事へのリンク+抜粋を表示させたいという案件があり、そのときにとった方法の覚え書きです。
任意の投稿の抜粋を取得する関数
get_the_excerpt()
はグローバルの$post
を参照する仕様になっているので、一時的に$post
を書き換えてそのまま使うという方法もあります。ですが今回のケースでは記事内で使うので、あまり$post
は書き換えたくありません。
ということで記事IDから投稿データを取得し、抜粋があればそれをそのまま返し、なければ記事全体から指定した文字数だけ切り出す仕様としました。ついでに切り出す場合に文字数や末尾に付ける文字列も指定できるようにしています。
function my_excerpt( $post_id, $length = 120, $text = '...' ) { $post = get_post( $post_id ); $post_excerpt = $post->post_excerpt; if ( empty( $post_excerpt ) ) { // 抜粋にデータがない場合は投稿記事から切り取る. return wp_html_excerpt( strip_shortcodes( $post->post_content ), $length, $text ); } else { // 抜粋がある場合はそのまま抜粋の内容を返す. return $post_excerpt; } }
これをfunction.phpに貼り付けてもらえば抜粋を取得する関数として使うことができます。文字数の初期値は120文字としています。
簡単に説明しておくと、
wp_html_excerpt()
はHTMLタグを除去して指定の文字数を抜粋してくれる関数です。詳しくはcodexを見てください。末尾につける文字列(…)も任意に指定できる優れものです。これを使うことでプレーンなテキストを取り出すことができます。
strip_shortcodes()
は記事内のショートコードを削除する関数です。詳しくはcodexを見てください。記事冒頭にショートコードを挿入した場合に、それがそのまま抜粋に表示されるのは微妙ですよね。その対策としてこの関数を使っています。
参考:the_excerptが出力されない | WordPress.org
コメント
この記事へのコメントはありません。
コメントをどうぞ