以前まで、下のような感じでWordPressの個別記事には同じカテゴリのにある「前に書いた記事」と、「次に書いた記事」を表示していました。
前の記事、次の記事を表示
こちらは、次の記事がない状態
上の2つの画像のように、関数「previous_post_link」や「next_post_link」を使って表示していたのですが、この表示ってもっとかっこよくできないかなぁと思いました。例えば、
- 記事にサムネイルつけられたらいいなぁ
- 「前の記事」「次の記事」が存在しないときの空欄を有効活用したい
などです。そう思ってネットを調べますと、よい方法がありました。もし、「もうちょっとこの辺、かっこよくカスタマイズできないのかな~」みたいに思われている方がいらっしゃいましたら、参考程度にご覧ください。
WordPressの関数「get_adjacent_post」を使ってかっこよくできる
WordPressでは「get_adjacent_post」という関数を使います。Codexの「Function Reference/get adjacent post」を参考にしますと、
Retrieve adjacent post.
Can either be next or previous post.
と書いてあります。Google翻訳に助けを借りて・・・
隣接ポストを取得します
次の記事、前の記事、どっちも取得できます
って解釈しました。
・・・要は、私が今回やりたかった「前の記事」「次の記事」を取得できるってことだと理解してます。早速、Codexに掲載されているサンプルコードを見ましょう~。
コードの書き方(Codexより)
<?php get_adjacent_post( $in_same_cat, $excluded_categories, $previous ); ?>
パラメーター
- $in_same_cat オプション。同じカテゴリの記事を表示させるにはtrue(デフォルト:false)
- $excluded_categories オプション。除外するカテゴリをカテゴリIDで指定(デフォルト:””)
- $previous オプション。true:前の記事 false:次の記事(デフォルト:true)
※この関数を使うときの注意点
- 出力するのは「記事(投稿)」
- この関数を使うときはグローバル変数「$post」を設定していないとNULLになる
- 記事がある場合は出力する
以上を前提としまして、サンプルコードを書きます~。
具体的なコード(サンプル)
例えば今回の場合は「同じカテゴリ内の『前の記事』『次の記事』を表示したい」とします。以下のコードはWordPressフォーラムの「次の記事」「前の記事」のリンクをサムネイル付きで表示させたい」を参考にして、自分用にカスタマイズました。
<!--▼ページ送り▼--> <?php $prevpost = get_adjacent_post(true, '', true); //前の記事 $nextpost = get_adjacent_post(true, '', false); //次の記事 if( $prevpost or $nextpost ){ //前の記事、次の記事いずれか存在しているとき ?> <div class="cat_paging"> <?php if ( $prevpost ) { //前の記事が存在しているとき echo '<dl class="alignleft"><dt>前の記事(Previous)</dt><dd><a href="' . get_permalink($prevpost->ID) . '"><span class="thumb">' . get_the_post_thumbnail($prevpost->ID, 'thumbnail') . '</span><span class="title">' . get_the_title($prevpost->ID) . '</span></a></dd></dl>'; } else { //前の記事が存在しないとき echo '<div class="alignleft nopost"><a href="' . network_site_url('/') . '">TOPへ戻る</a></div>'; } if ( $nextpost ) { //次の記事が存在しているとき echo '<dl class="alignright"><dt>次の記事(Next)</dt><dd><a href="' . get_permalink($nextpost->ID) . '"><span class="thumb">' . get_the_post_thumbnail($nextpost->ID, 'thumbnail') . '</span><span class="title">' . get_the_title($nextpost->ID) . '</span></a></dd></dl>'; } else { //次の記事が存在しないとき echo '<div class="alignright nopost"><a href="' . network_site_url('/') . '">TOPへ戻る</a></div>'; } ?> </div> <?php } ?> <!--▲ページ送り▲-->
やっていること
重要な条件分岐の場所は、コード内にコメントとして書いてあります。「前の記事」「次の記事」が存在している時はそれぞれ該当する記事を「サムネイル付きで」出力して、記事が存在していない場合は「TOPページに戻る処理」を追加しています。「前の記事」「次の記事」のどちらも存在しない場合は、そもそもコード自体を出力しないようにしています。
設置するとこうなります
上のコードを使って、スタイルシート(CSS)でちょっと表示を整えると、下のようになります。
サムネイルも表示されましたねぇ~
次の記事がない場合は、TOPへ戻るようにリンクを設置
いかがですか。なかなかいい感じじゃないですかねぇ。
デザインはもうちょっとかっこよくしたいかな・・・w
使える、これは使える
この関数を知った時は「これは!」と思いました。特に「前の記事」「次の記事」って今までとてもシンプルな表示だったので、ちょっとサムネイルなどもつけたいなぁと思った場合は、この方法を使うといい感じになりますね。
あと、記事がない時の処理も、細かいことですがとても重要な箇所だと思います。私の場合は記事がない場合には「TOPへ戻る」リンクを設置していますが、アイデア次第で面白いこと出来るなぁと思いました。
私個人的には、今回のカスタマイズはとても満足しています~!
このページを共有する