@Tom J Nowell คำตอบคือจุดที่ ฉันพบทางเลือกอื่น (โดยใช้ฟังก์ชั่นที่แตกต่างกัน) อธิบายไว้ที่นี่แต่ฉันชอบสิ่งนี้มากกว่านี้
ในกรณีของฉันฉันมีอาร์เรย์ของ $ posts พร้อมโพสต์ทั้งหมดที่ฉันต้องการแทรกและ $ media แยกต่างหาก (เช่น $ $ nid keys เหมือนกับ $ posts) กับสื่อ รหัสของฉันเป็นโซลูชันเดียวกับ Tom's แต่ได้รับการปรับสภาพใหม่เพื่อใช้ฟังก์ชันที่ไม่ระบุชื่อ:
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 ในแต่ละสื่อ $ $ [$ nid] shuold เป็นภาพเด่นของโพสต์
WordPress shouold เปลี่ยนอย่างแน่นอน media_sideload_image () ดังนั้นมันจึงคืนค่า $ id ในความเป็นจริงการทำงานมีมันอยู่ในมือให้ดูแหล่งที่มาที่นี่ ในความเป็นจริงมีตั๋วแทร็คสำหรับสิ่งนี้และพวกเขายังมีแพทช์เพื่อใช้กับคอร์ของคุณในเวลาเฉลี่ยถ้าคุณต้องการ