@ Tom J Nowell'in cevabı açık. Burada açıklanan başka bir alternatif buldum (farklı fonksiyonları kullanarak) ama bunu daha çok seviyorum.
Benim durumumda eklemek istediğim tüm gönderileri içeren $ gönderiler dizisi ve medya ile ayrı bir $ media ($ gönderilerle aynı $ nid tuşları) var. Kodum, Tom'unkiyle aynı çözümdür ancak anonim bir işlevi kullanmak için yeniden düzenlenmiştir:
foreach( $posts as $nid=>$post )
$posts[$nid]['ID'] = wp_insert_post( $post );
foreach( $posts as $nid=>$post )
foreach( $media[$nid] as $m=>$mitem ) {
if( 0 == $m ) add_action( 'add_attachment',
function( $att_id ) use ($posts, $nid, $mitem) {
update_post_meta($posts[$nid]['ID'], '_thumbnail_id', $att_id);
$posts[$nid]['media_urls'][] = $mitem['url'];
}
);
media_sideload_image($mitem['url'], $post['ID']);
remove_all_actions( 'add_attachment' );
}
Benim durumumda, her $ media [$ nid] öğesinin ilk öğesinin gönderisinin öne çıkan görüntüsü olduğunu varsayıyorum.
WordPress shouold kesinlikle media_sideload_image () değiştirerek $ id değerini döndürür. Aslında fonksiyon elinizin altında, buradaki kaynağa bakın . Aslında bunun için bir parça bilet var ve hatta bu süre içinde çekirdeğinize uygulamak için yamalar bile var.