为了wp_generate_attachment_metadata()
要正常工作,它会创建缩略图和其他中间/图像大小,如medium
和large
, 图像附件/发布数据必须具有正确的MIME类型(post_mime_type
), 尽管你在$attachment
数组(post数据),代码中的此部分存在问题:
$wp_filetype = wp_check_filetype(basename($filename), null );
哪里
$filename
定义为
$filename = \'jana-eisenstein\';
这是一个不带扩展名的文件名(例如。
.png
), 并且该变量的值在函数中保持不变,因此在上面的代码中
ext
和
type
在
$wp_filetype
数组是
false
.
因此\'post_mime_type\' => $wp_filetype[\'type\']
相当于\'post_mime_type\' => false
, 导致图像附件的MIME类型无效。
要修复它,您可以将完整文件路径传递给wp_check_filetype()
, 或使用basename( $uploadfile )
而不是basename( $filename )
:
$wp_filetype = wp_check_filetype( $uploadfile, null ); // pass full path
$wp_filetype = wp_check_filetype( basename( $uploadfile ), null ); // OR this works, too
备用选项this example 其中使用media_handle_sideload()
并自动调用wp_update_attachment_metadata()
, 因此,您无需手动调用它。:)
function add_remote_image_to_library( $source_url, $filename, $img_title ) {
require_once ABSPATH . \'wp-admin/includes/image.php\';
require_once ABSPATH . \'wp-admin/includes/media.php\'; // load media_handle_sideload()
require_once ABSPATH . \'wp-admin/includes/file.php\'; // load download_url()
// Download the file to a temporary (system) file.
$tmp = download_url( $source_url );
// Build an array like in the $_FILES superglobal.
$wp_filetype = wp_check_filetype( basename( $source_url ) );
$file_array = array(
\'name\' => $filename . \'.\' . $wp_filetype[\'ext\'],
\'tmp_name\' => $tmp,
);
// Must manually delete the file in case of download errors.
if ( is_wp_error( $tmp ) ) {
@unlink( $file_array[ \'tmp_name\' ] );
return $tmp;
}
// Now create the attachment plus thumbnails and other sizes.
$post_id = 0; // the parent post ID, if applicable
$id = media_handle_sideload( $file_array, $post_id, null, array(
\'post_title\' => $img_title,
) );
// You should delete the temporary file if the above resulted in a WP_Error.
if ( is_wp_error( $id ) ) {
@unlink( $file_array[\'tmp_name\'] );
return $id;
}
return $id; // return the attachment ID or whatever that you want to return..
}