一昔前だと、ギャラリーショートコードは添付ファイルをタイル状に並べるものと言いう事で
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 の入れ子は不格好だけれども 動くところまでで、メモに残します。