mypglog

プログラミングやデザインの事をメモ等かねながら

wordpressで次の記事とか前の記事のカスタムフィールドの内容を読み込む

記事ナビゲーションではまる

いつもお願いしてるコーダーさんの手が空かないとかでスケジュール的にアレだったので、久しぶりに自分でwordpressの組み込みをしました。PHPとか本当よくわからないです。

で、はまる。凄いハマった。状況としては

  1. カスタム投稿タイプ「news」の個別記事を表示させている
  2. 記事下部に前の記事・次の記事的なナビゲーションをつけたい
  3. ついでにその前の記事にカスタムフィールドの画像を載せたい
  4. まあここまで来たらテキストフィールドのサブタイトル的なフィールドも載せちゃおっか

という状況で、1まで完成している状態でした。
そして色々試したあげく、ようやく正解にたどり着きました。

次の記事と前の記事のIDをまず取る

<?php
$prevpost = get_adjacent_post(false, '', true); //前の記事
$nextpost = get_adjacent_post(false, '', false); //次の記事
?>

続いて条件分岐を書く

<?php
$prevpost = get_adjacent_post(false, '', true); //前の記事
$nextpost = get_adjacent_post(false, '', false); //次の記事

if ( $prevpost ) {
?>
前の記事があった場合の内容
<?php } else{ ?>
前の記事がなかった場合の内容
<?php }?>

<?php

if( $nextpost ) {
?>
次の記事があった場合の内容
<?php } else{ ?>
次の記事がなかった場合の内容
<?php }?>

こんな感じ。後は入れたい箇所に入れたいものを入れる。

カスタムフィールドの画像を表示させたい!
<img src="<?php echo wp_get_attachment_url(get_post_meta($prevpost->ID,"フィールドのID",true));?>">

次の記事の画像が良い時は$prevpostを$nextpostに。

カスタムフィールドのテキストを表示させたい!
<?php
echo nl2br(get_post_meta($prevpost->ID, subtitle, true));
?>

nl2brはテキストエリアで自動改行していた場合、これ入れておかないと改行してくれないため入れてあります。
次の記事のテキストが良い時は$prevpostを$nextpostに。

普通にタイトルを取得したい
<?php
get_the_title($prevpost->ID)
?>

次の記事のタイトルが良い時は$prevpostを$nextpostに。
ちなみにリンクのURLなら以下。

<?php
get_permalink($prevpost->ID)
?>

勉強になった!