@Tom Дж. Ноуелл відповідь на місці. Я знайшов іншу альтернативу (з використанням різних функцій), пояснену тут, але мені ця ще подобається.
У моєму випадку у мене є масив $ публікацій з усіма публікаціями, які я хочу вставити, і окремий $ media (ті ж ключі $ nid, що і $ posts) з медіа. Мій код - це те саме рішення, що і Том, але відновлено використання анонімної функції:
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' );
}
У моєму випадку я припускаю, що 1-й елемент у кожному $ media [$ nid] повинен бути зображеним зображенням його допису.
WordPress повинен безумовно змінити media_sideload_image (), щоб він повертав $ id. Насправді функція має її під рукою, дивіться джерело тут . Насправді є путівка на це, і вони навіть мають виправлення, щоб застосувати це до вашої основи в середній час, якщо хочете.