wp_get_attachment_metadataでメディアのcaptionを取得する方法

WordPress

2019.11.15

wp_get_attachment_metadataではメディアのcaptionを取得できない

いきなりですが、wp_get_attachment_metadataではcaptionが取得できないみたいです。
WordPressのギャラリー機能を使って画像とキャプションを出力したくて、便利そうなwp_get_attachment_metadataという関数を見つけたので、使ってみたところcaptionの値が取得できませんでした。
想定では、

で、キャプションが取得できると思っていたのですが、、、。
var_dumpしても中身は空っぽ。思っていた機能と違うのだろうか?
 

get_postでcaptionを取得する方法

ネットで調べても明確な答えは出せず。代わりにget_postを使う方法が紹介されていた。

たしかに画像に設定したキャプションを取得できた。
では、これを応用して、wp_get_attachment_metadataでcaptionの値を取得する方法は?
 

wp_get_attachment_metadataでメディアのcaptionを取得する方法

やっと本題です。
functions.phpに以下のコードを書いておけば、wp_get_attachment_metadataで取得した値にキャプションが設定されるようになります。

※配列かどうかチェックしないと、「Uncaught Error: Cannot use string offset as an array」エラーが出るので7行目に「if(is_array($data)) {」を追記。

コードの解説(備忘録)

・4行目
wp_get_attachment_metadata関数のソースコードを見てみると、関数の最後に「return apply_filters( ‘wp_get_attachment_metadata’, $data, $post->ID );」というコードがあります。
このコードはフィルターフックの関数の戻り値をそのままreturnしているので、フィルターフック関数を定義して$dataの中のcaptionに適切な値を設定してあげれば良いわけです。
・5~11行目
フィルターフック関数です。
6行目で、上述したget_postでcaptionを取得する方法を使い、8行目でそのキャプションの値を$dataのcaptionに代入しています。
これで呼び出し側は冒頭に書いたコードでキャプションを取得できるようになります。
わざわざget_postを使わなくても済むので、少しコードがスッキリしますね。
 

おさらい

functions.phpに以下のコードを追加

 

使用方法(キャプションを変数に代入)

これで、$caption変数の中に、メディア編集で設定したキャプションを取得できます。

タグ, , ,