我正在尝试从URL上传照片,然后将其设置为用户提交的产品的功能图像
现在我可以完成此功能的第一部分了问题是我无法获取媒体的新URL并将其设置为WooCommerce产品的功能图像
这是代码
add_action(\'transition_post_status\', \'new_product_add\', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != \'publish\'
&& $new_status == \'pending\'
&& !empty($post->ID)
&& in_array( $post->post_type,
array( \'product\')
)
) {
$external_url = $post->post_excerpt;
/********************************************/
function uploadImageToMediaLibrary($postID, $url, $alt = "blabla") {
$tmp = download_url( $url );
$desc = $alt;
$file_array = array();
preg_match(\'/[^\\?]+\\.(jpg|jpe|jpeg|gif|png)/i\', $url, $matches);
$file_array[\'name\'] = basename($matches[0]);
$file_array[\'tmp_name\'] = $tmp;
if ( is_wp_error( $tmp ) ) {
@unlink($file_array[\'tmp_name\']);
$file_array[\'tmp_name\'] = \'\';
}
$id = media_handle_sideload( $file_array, $postID, $desc);
if ( is_wp_error($id) ) {
@unlink($file_array[\'tmp_name\']);
return $id;
}
return $id;
}
uploadImageToMediaLibrary($post->ID, $external_url, "custom_alt");
//MEDIA UPLOADED SUCCESSFULLY
//I DONT KNOW HOW TO GET THE NEW MEDIA URL FROM MEDIA GALLERY
//AND SET IT FOR THE PRODUCT FEATURE IMAGE
/********************************************/
$term = get_term_by(\'name\', \'PARENT_CATEGORY\', \'product_cat\');
wp_set_object_terms($post->ID, $term->term_id, \'product_cat\', true);
}
}
最合适的回答,由SO网友:Sally CJ 整理而成
要获取上载图像/附件的URL,可以使用wp_get_attachment_url()
(始终返回完整大小的图像URL)或wp_get_attachment_image_url()
对于图像附件:
// This is how you should call uploadImageToMediaLibrary(); assign the value to $att_id.
$att_id = uploadImageToMediaLibrary($post->ID, $external_url, "custom_alt");
$url = wp_get_attachment_image_url( $att_id, \'full\' ); // full-sized URL
但是,要将图像设置为上载图像的帖子或任何实际帖子的特色图像,您可以使用
set_post_thumbnail()
像这样:
$att_id = uploadImageToMediaLibrary($post->ID, $external_url, "custom_alt");
if ( ! is_wp_error( $att_id ) && $att_id ) {
set_post_thumbnail( $post->ID, $att_id );
}
<我修改了这个答案,因为使用了
set_post_thumbnail()
比手动更新私有元数据更好
_thumbnail_id
用于发布特色图片=)