Câu trả lời của @Tom J Nowell là tại chỗ. Tôi tìm thấy một sự thay thế khác (sử dụng các chức năng khác nhau) được giải thích ở đây nhưng tôi thích cái này hơn.
Trong trường hợp của tôi, tôi có một mảng các bài đăng $ với tất cả các bài đăng tôi muốn chèn và một phương tiện $ media riêng (cùng khóa $ nid như $ bài đăng) với phương tiện truyền thông. Mã của tôi là giải pháp tương tự như của Tom nhưng được tái cấu trúc để sử dụng hàm ẩn danh:
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' );
}
Trong trường hợp của tôi, tôi giả sử mục đầu tiên trong mỗi $ media [$ nid] sẽ là hình ảnh đặc trưng của bài đăng của nó.
WordPress shouold chắc chắn thay đổi media_sideload_image () để nó trả về $ id. Trong thực tế chức năng có nó trong tay, xem nguồn ở đây . Trong thực tế, có một vé theo dõi cho điều này và họ thậm chí có các bản vá để áp dụng điều này vào cốt lõi của bạn trong thời gian trung bình nếu bạn muốn.