記事の中にある画像データをサムネイルで取得する関数

記事の中にある画像を直接取得する方法です。

get_children関数やthe_post_thumbnail関数が利用できない場面で使えると思います。
似たような関数を探せば同じようなものが出てくるのですが、どうも画像のURL属性しか取得していない感じですので「ちょっと違うなー」と思って作ってみました。

この関数の良いところは「attachment_id」が取得できる事です。
つまりidさえ取得できれば「wp-get_attachment_****」と付くものは使えるという事です。

[php]
/*
記事の中から指定された順番の画像データを取得
(imgタグのclass属性 wp-image-XX を利用)
$content : $post->post_content
$idx : 記事内の画像の表示順
*/
function get_post_image($content="", $idx=0) {
$thumb = "";
if(strlen($content) === 0) return $thumb;

// imgタグのwp-image-ID クラスを検索
preg_match_all(‘/wp-image-(\d+)/’, $content, $m);

if(count($m[1]) > 0) {
while(!isset($m[1][$idx])) {
$idx–;
if($idx < 0) break;
}
// $m[1][$idx] = attachment_id
if($idx > -1) $thumb = wp_get_attachment_image($m[1][$idx]);
}

return $thumb;
}

[/php]

functions.phpなんかに書いておけば良いかと思います。

呼び出すときは、

[php]
if(has_post_thumbnail()) :
$thumb = get_the_post_thumbnail();
else:
$thumb = get_post_image(get_the_content());
endif;
[/php]

でサムネイル画像が取得できます。

返り値

<img>タグ。取得できなかった場合は空文字です。

<img>タグは20行目のwp_get_attachment_imageで取得しているので、ここを色々変更すれば自由に加工できます。

オプション値について

$content
HTMLの記事です
$idx
記事に表示される画像の○番目を取得します。(※1番目の画像 = 0)
○番目の画像が見つからない場合は$idxを除算しながら取得します。

注意!!

この関数はwordpressがimgタグに自動で付加する「wp-image-XX」というclassから取得しています。
今後、wordpressの仕様が変更になると利用できなくなる可能性があるのでご注意ください。

サブカテゴリ毎に記事をまとめて表示2

前回の記事で不満だった部分を解消してみた。
具体的には以下のようにする

  1. 親カテゴリのトップページにサブカテゴリの一覧を表示
  2. 各サブカテゴリ毎に記事をまとめて表示

前回で解決できなかった問題は自動でサブカテゴリの一覧を取得してループさせながら各HTMLを出力させる事。
そもそもつまづきの原因はサブカテゴリのIDを取得できなかったから。
逆に言うと「親カテゴリに属するサブカテゴリのIDを全て取得」できれば実現可能という事になる。
そこでかなり微妙ながらサブカテゴリのIDを取得するように試みた。

(さらに…)