WordPressの投稿内の画像情報の取得方法についてです。
サムネイル表示したり、URLを取得したり、というのが主な用途になるかと思います。
これ、いつも思うんですけど意外に面倒くさい。
そして、いつも「どうやったんだっけ?」と調べなおす効率の悪さ。
アイキャッチ画像(投稿サムネイル)関連情報の取得であれば、the_post_thumbnail
などのテンプレートタグが用意されていますが、個人的にはアイキャッチ画像をほとんど使っていないもので…。
スマートな方法はないものかと調べてみると、ヒットするのは、get_the_content
で記事本文を取得し、正規表現でその中からimg要素にマッチした部分を抜き取るやり方が目立ちます。私的にはスマートな感じがしないので、Wordpress関数を使った方法にこだわりたいと思います。
使うのは、get_children
。
//投稿IDを取得(状況に合わせてIDの取得方法は変えてください) global $post; $post_id = $post->ID; //投稿中のすべての添付データの情報をオブジェクト形式(デフォルト)で取得 $attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment') ); //以下のように書いても同じ結果を取得できます $attachments = get_children( 'post_parent='.$post_id.'&post_type=attachment') );
$attachmentsをダンプしてみるとわかりますが、この中に様々な情報が含まれております。
例えば最初の一枚目の画像のタイトルとURLを取得したい場合は、以下のようになります。
//画像タイトル取得 $title = $attachments[0]->post_title; //画像URL取得 $url = $attachments[0]->guid;
端っから最初の1枚しか用がないのであれば、get_children
のパラメータ「numberposts
」に「1
」、「order
」に「ASC
」(昇順)を設定すればいいですね。
//パラメータ : numberposts=1 (1件取得) //パラメータ : order=ASC (昇順) $attachments = get_children( 'post_parent='.$post_id.'&post_type=attachment&numberposts=1&order=ASC') );
ただこの「最初の1枚」というのが曲者だったりします。並び順(order)を昇順(ASC)にするのは、おそらく大方の場合は最初に登録したもの(つまり古いもの)が1枚目にくるだろうという想定に基づいています。なので、画像のアップロード順と見た目の並び順が違う場合や画像を一度削除してアップロードしなおした場合などは、並び順を昇順にしても狙った画像情報が得られない可能性があります。ご注意ください。
間違いなく一番目の画像を取得したいのであれば、やはりget_the_content
からimg要素を抜き出す方法になるのでしょうか…。
ge_children
のパラメータなどの詳細情報はこちらをご確認ください。
関数リファレンス/get children – WordPress Codex 日本語版
get_children:WordPress私的マニュアル