Hallo Florian,

es geht noch schneller: die ID aus dem class-Attribut des Bildes auslesen. Der zu suchende Klassennamen hat den Aufbau wp-image-{ID}. Er wird automatisch eingefügt, wenn das Bild manuell im Editor eingebaut wird.

In meinen Plugins "Quick Featured Images" und "Recent Posts Widget With Thumbnails" (beide im WP-Repository zu finden) setze ich die Abfrage nach dieser ID ein, bevor es bei erfolglosem Ergebnis weitergeht mit dem von dir beschriebenen Ansatz. Mit einer Suche nach dem Funktionsnamen get_first_content_image_id findest du den kompletten Code.

Bei get_children() kannst du mit dem Parameter 'numberposts' => 1 die Abfrage auf genau ein einziges Ergebnis begrenzen. Die Abfrage wird dann abgebrochen und das erste gefundene Bild in einem Array mit einem einzigen Element zurückgegeben. Dein weiterer Code bleibt davon unbeeinflusst.

Galerien können auch mit dem ids-Attribut im [gallery]-Shortcode gebaut werden. Diese Möglichkeit ist in deinem Code nicht zu finden. Ein Ansatz, der im kostenpflichtigen Plugin "Quick Featured Images Pro" eingesetzt wird, wäre:

function get_first_wp_gallery_image_id ( $post_id, $content ) {
	// try to find a gallery and pick its first image
	preg_match( '/\[gallery[^\]]*ids="(\d+)[^\]]*\]/i', $content, $found_id );
	// if first image id found: check whether is image
	if ( $found_id ) {
		$img_id = absint( $found_id[ 1 ] );
		// if is image: return its id
		if ( wp_get_attachment_image_src( $img_id ) ) {
			return $img_id;
		}
	} // if(found_id)
		
	// if nothing found: return 0
	return 0;
}