Wordpressの記事に対して、画像を関連づけることができます。
あまり知られていない。というかひっそりと存在している機能で、ギャラリーと言う機能です
投稿に対して画像を配置させるやり方はそれなりにわかりやすいインターフェースが存在しているのですが、それとは異なる機能になります
(調査対象のwordpressバージョン 5.5.3)
ギャラリー追加のやり方
- (記事に画像を配置するのと同様に)新規投稿画面・投稿編集画面で「メディアを追加」をクリックします
- メディアを追加画面から新規ファイルを選択するか、今まで登録した画像を選択します
- すると、テーブル [***]_posts に、記事idをpost_parentにもつ post_type = attachment のデータが追加されます
- 今度は「メディアを追加」から「ギャラリーを作成」をクリックします
- ここでもファイルをアップロード・メディアライブラリから選択 が選べます
- メディアを追加の場合は、imgタグが埋め込まれますが、ギャラリーの場合は gallery ショートコードが追加されます
- データとして、「ファイルをアップロード」により追加された画像についてはpost_parentがその投稿になりますが、「メディアライブラリ」から選択された画像についてはデータが増える訳ではないようです
ショートコード galleryを読み解く
https://wpdocs.osdn.jp/%E3%82%AE%E3%83%A3%E3%83%A9%E3%83%AA%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9 によると、 wp-includes/media.php にショートコードの実装があるということで、そちらを確認してみます
コードは function gallery_shortcode( $attr ) {
- property idsが指定されていたらinclude変数にそのまま渡す。orderbyが指定されていなければ post__inをorderbyに割り当てる
- filter post_galleryを呼び出す。post_galleryで何らの文字列が返ってきたらそれをショートコードに置き換える
- post_galleryが定義されていない、もしくは空白が返ってきた場合はデフォルトの処理が行われる
property "include", "ids"が指定されていたらそのidを元にpost_type=attachment, post_mime_type=imageの postを取得する(get_posts)
- property "id"が指定されている場合は、そのidをpost_parentにもつ、post_type=attachment, post_mime_type=mageのpostを取得する。property "exclude"が指定されている場合はそのidに一致する画像を除いて取得する (get_children)
- 取得されたpostを元に画像一覧のhtmlを生成する