@ Tom J Nowells Antwort ist genau richtig. Ich habe eine andere Alternative gefunden (mit verschiedenen Funktionen) , die hier erklärt wurde, aber ich mag diese noch mehr.
In meinem Fall habe ich ein Array von $ posts mit allen Posts, die ich einfügen möchte, und ein separates $ media (dieselben $ nid-Schlüssel wie $ posts) mit dem Medium. Mein Code ist die gleiche Lösung wie der von Tom, wurde jedoch überarbeitet, um eine anonyme Funktion zu verwenden:
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' );
}
In meinem Fall gehe ich davon aus, dass das erste Element in jedem $ media [$ nid] das vorgestellte Bild seines Beitrags sein sollte.
WordPress sollte media_sideload_image () definitiv ändern, damit es die $ id zurückgibt. In der Tat hat die Funktion es zur Hand, siehe die Quelle hier . Tatsächlich gibt es dafür ein Track Ticket und sie haben sogar Patches, um dies in der Zwischenzeit auf Ihren Kern anzuwenden, wenn Sie möchten.