WordPressで前後の記事に含まれる画像を表示する方法をメモ。
WordPressで「次の記事」「前の記事」のリンクを表示しようとコードを探すと、以下のようなコードをよく見かけます。
これで問題はないのですが、どうせならテキストだけではなく、その記事に含まれる画像のサムネイルも表示したい。と思ったので調べてみました。
確認環境
- WordPress3.0.6
- 今回は、アイキャッチのサムネイルは使用せず、記事先頭にある画像をひっぱってくる方法です
- 該当コードはわかりやすさのため、画像取得のみを行っています。
functions.phpに「記事に含まれる1枚目の画像を抽出する」コードを追加
以前「自分用メモ:WordPressスニペット2|1bit::memo」で紹介した、記事の1枚目の画像を抽出するコードをfunctions.phpに記述します。
]*)src=["|']([^"|^']+)["|']([^>]*)>',$mypost->post_content,$img_array)){
// imgタグで直接画像にアクセスしているものがある
$dummy=ereg(']*)alt=["|']([^"|^']+)["|']([^>]*)>',$mypost->post_content,$alt_array);
$resultArray["url"] = $img_array[3];
$resultArray["alt"] = $alt_array[3];
}else{
// 直接imgタグにてアクセスされていない場合は紐づけられた画像を取得
$files = get_children(array('post_parent' => $mypost->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image'));
if(is_array($files) && count($files) != 0){
$files=array_reverse($files);
$file=array_shift($files);
$resultArray["url"] = wp_get_attachment_url($file->ID);
$resultArray["alt"] = $file->post_title;
}else{
return(null);
}
}
return($resultArray);
}
?>
get_adjacent_post()関数で前後の記事を取得する
- get_adjacent_post関数は、前後の記事情報を取得する関数です。
get_adjacent_post(true, ”, true); は前の記事、
get_adjacent_post(true, ”, false); は次の記事
を取得します。 - if ( $prevpost ): 〜では、前の記事が存在しているかを確認します。
- あとは、以前の「自分用メモ:WordPressスニペット2|1bit::memo」の記載内容と同じで、functions.phpに追加したgetPostImage関数に取得した前後記事を渡し、そこから記事最初の画像を取得します。
以下をsingle.phpに記述してください。
" alt="post_title); ?>" height="200" width="200" />
<?php $nextpost = get_adjacent_post(true, '', false); if ( $nextpost ) : ?>
<?php $postImage2 = getPostImage($nextpost);if($postImage2 != null){ //記事内に画像があったら ?>