@汤姆·诺厄尔的回答很准确。我找到了另一种选择(使用不同的函数)explained here 但我更喜欢这个。
在我的例子中,我有一个$posts数组,其中包含我要插入的所有帖子,还有一个单独的$媒体(与$posts相同的$nid键)。我的代码与Tom的解决方案相同,但经过重构后使用匿名函数:
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\' );
}
在我的情况下,我假设每个$media[$nid]shuld中的第一个项目是其帖子的特色图片。
WordPress应该明确更改media\\u sideload\\u image(),以便返回$id。事实上,函数已经准备好了,请参见source here. 事实上track ticket for this 如果你愿意的话,他们甚至有补丁可以同时将其应用到你的核心部位。