一昔前だと、ギャラリーショートコードは添付ファイルをタイル状に並べるものと言いう事で
get_children()関数などで取得していましたが、もうそれは昔話で、現在はメディアの追加で、添付画像であろうとなかろうと、自由にギャラリーを表示できます
かなり、以前ギャラリーのアーカイブを作る場合は、カテゴリーをギャラリーに設定して、ギャラリーアーカイブを表示するというのが当たり前でしたが、今だと(いや、もうすでに過去形かもしれませんが)、投稿フォーマットのギャラリーを使います。
自分がメンテナンスを続けている、Raindropsテーマでも、カテゴリー ギャラリー、投稿フォーマット ギャラリー共用でギャラリーアーカイブを表示します
この辺りも、そろそろ書き換える必要があるんだろうな、などと思いながら、フォーラムのスレッドを見ていました。(ギャラリーの最初の1枚を取得したい)
テーマでも、そんなことやっていたなぁと懐かしくもあり、改修しなければならない課題でもありそうであり、たたき台のコードを書いてみた
以下のコードは、投稿本文に記述されたショートコードを読み取って、記述されているアタッチメントIDを配列で取得するものなので、添付画像でなくても、取得できます
function get_galley_first_shortcode_ids( $id= 0 ) { global $post; $pattern= get_shortcode_regex(); $id = absint( $id ); if ( empty( $id ) ) { $id = absint( $post->ID ); $text = $post->post_content; } else { $text = get_post( $id ); $text = $text->post_content; } if ( preg_match( '/' . $pattern . '/s', $text, $matches ) && 'gallery'== $matches[ 2 ] ) { if ( preg_match( '!ids=(\' |")([0-9,]+)(\' |")!', $matches[ 3 ], $regs ) ) { return wp_parse_id_list( $regs[ 2 ] ); } } return false; }
たたき台なので、単に取得するだけで、コンディショナルタグを付けてなかったり、preg_match の入れ子は不格好だけれども 動くところまでで、メモに残します。