如何通过MEDIA_HANDLE_SIDELOAD()获取上传到WordPress的媒体URL

时间:2019-05-08 作者:Kamran Asgari

我正在尝试从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);
        }
    }

1 个回复
最合适的回答,由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 用于发布特色图片=)

相关推荐

无法创建目录Uploads/2018/12。其父目录是否可由服务器写入?

几天前,我将我的站点迁移到了一个新服务器上,然后问题就开始了,在迁移之前,一切都很好。现在,当我单击添加媒体并选择它显示的任何图像时。。。无法创建目录上载/2018/12。其父目录是否可由服务器写入?我找到了这个问题的一些答案,并尝试编辑选项。php文件,但还没有运气,我已经检查过了,上面目录的权限是777。所以,请检查相同的并帮助我。