WordPress 「続きを読む」の前後を別けて出力

WordPressで「続きを読む」の<!–more–>前後を分けて出力する方法のメモ

<!–more–>

<!–more–>を置くと投稿本文が分割されリスト表示で抜粋表示として使えます。これを本来の「本文の続き」区切りではなく、ヘッドラインとして使ってる場合も多いのではないでしょうか。

デフォルトでは続きを読むクリックでシングルポストの「続き」部分のアンカーにジャンプしますが、これを嫌って普通にシングルポストへのリンクに変更している方もおられるかもしれません。

「続きを読む」リンクのクリック時にページをスクロールしない

function remove_more_link_scroll( $link ) {
	$link = preg_replace( '|#more-[0-9]+|', '', $link );
	return $link;
}
add_filter( 'the_content_more_link', 'remove_more_link_scroll' );

「続きを読む」のカスタマイズ – WordPress Codex

シングルポストではmoreは関係なくなりひとまとめに「本文(content)」になります。せっかくヘッドラインと本文を分ける意味でmoreを使ってもシングルポストで意味をなしません。

そこでシングルページでもmoreの前後を分けて出力したいと思うのが人の常です。でも意外とそうでもなさそうで、皆そんなこと必要と思ってない感じです。それもそのはず、そもそもポストには「抜粋」というフィールドが「本文」とは別にあるのでヘッドラインにはそっちを使えばいいんですよね。

抜粋を利用しないくせに続きを読むを抜粋として利用するという、丁寧なのかものぐさなのか判らない運用をする粗忽な人(例えば私)が一部いまして、さらにその上「moreの前後で出力を分けたいのだが」などと、簡単な解決策を放棄してより難しそうなことをやりたがったりします。

moreの前後で出力を分けたい

more前を抜粋かヘッドラインのように使ってると、シングルポストで本文と一緒くたになることで文脈として違和感があるものになります。それを誤魔化すためにmoreの場所にペンギンのアイコンを置いたりする人もいますが、もうちょっと別のアプローチを施したいと思ったりもします。例えばアイキャッチ画像を挟み込むとか。

ヘッドライン – アイキャッチ画像 – 本文

という構図が美しいですね。この場合、アイキャッチ画像の存在がちょっぴり大事になるかもしれません。無意味な画像ではなく、本文のメインとなる画像であることによって効果が上がる気がします。例えばここDigibalBooではわりと無意味な画像が多いのですがMoiveBooでは映画のポスターアートを画像に用いているのでしっくりきます。

get_extended()

moreの前後を分けて出力するにはget_extendedを使います。

get_extended は<!–more–>で区切った内容を取得する関数で、前をmain、後をextendのキーとして連想配列します。ゲットするのは「main: more前, extend: more後」の両方ってことですね。

main キーの配列には <!--more--> より前の本文、extend キーの配列には <!--more--> より後の本文が入っています。関数リファレンス/get extended

前後を分けて出力するには、この関数からmainかextendかどちらかを選んで出力させなければなりません。

<?php get_extended( $post_content ) ?>

関数そのものはこのように使うそうですがこれではゲットしただけでmare前または後をどうやって分けて出力するのかわかりません。

関数リファレンスではこの後突然難解なコードが例として示されていて「何これ?」となります。知りたいのはmore前あるいはmore後をどうやって出力するのかだけですのに。

content.phpで使う

テーマテンプレートでいえば、more前後を出力したいのはsingle.phpではなくてその中のcontent.phpのほう、つまりメインループの中ってことが多いと思います。それ前提だとリファレンスの例より簡単に済みます。

echo get_extended( $post->post_content )['main'];
echo get_extended( $post->post_content )['extend'];

$post->post_content が「このポスト」を指定します。お尻に[‘main’]または[‘extend’]をくっつけることで個別に出力できます。content.phpでは本文が the_content() ですがこれを置き換えればいいですね。

moreの前後で出力を分けられたので、間に画像を挟むも良し、それぞれクラスを付けて別の装飾をするも良し、加工し放題になります。

あとがき

get_extended関数によって、more前が「main」後ろが「extend」と判りました。more前がメイン・・・。more前がメイン・・・。抜粋やヘッドラインとして使ってしまっていることが心苦しくなってまいりましたが。

広告
カテゴリーWordPress
このエントリーをはてなブックマークに追加

コメントを残す

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