WordPress Snippet

ワードプレスをカスタマイズしよう

投稿の、ギャラリーショートコード(gallery shortcode)IDを取得する

一昔前だと、ギャラリーショートコードは添付ファイルをタイル状に並べるものと言いう事で

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 の入れ子は不格好だけれども 動くところまでで、メモに残します。

[emulsion_relate_posts]