@ टॉम जे नोवेल का जवाब हाजिर है। मुझे एक और विकल्प मिला (विभिन्न कार्यों का उपयोग करके) यहाँ समझाया गया लेकिन मुझे यह एक और पसंद है।
मेरे मामले में मेरे पास सभी पोस्टों के साथ $ पोस्ट की एक सरणी है, जिसे मैं सम्मिलित करना चाहता हूं और मीडिया के साथ एक अलग $ मीडिया ($ पोस्ट के समान $ nid कुंजी)। मेरा कोड टॉम के समान ही समाधान है लेकिन एक अनाम फ़ंक्शन का उपयोग करने के लिए फिर से बनाया गया है:
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' );
}
मेरे मामले में मैं प्रत्येक $ मीडिया [$ nid] में 1 आइटम को मानता हूं, जो कि उसके पोस्ट की चित्रित छवि है।
वर्डप्रेस shouold मीडिया_sideload_image () को निश्चित रूप से बदल देता है, इसलिए यह $ id लौटाता है। वास्तव में फ़ंक्शन में यह हाथ में है, यहां स्रोत देखें । वास्तव में इसके लिए एक ट्रैक टिकट है और यदि आप चाहते हैं तो इस समय के दौरान इसे अपने मूल पर लागू करने के लिए उनके पास पैच भी हैं।