我正在制作用于图像优化的自定义wp插件。我选择了图像,脚本开始优化并将新图像放置在上载文件夹中。 问题是我无法在WP Media中正确注册新图像,我已经看到很多关于此的帖子,但仍然没有解决。
主要问题是我可以在wp媒体中看到文件,但是没有缩略图或其他信息,例如文件大小,图像宽度和高度。
第一次,我的脚本将他的文件上传到/ wp-content / uploads / plugin-folder /中,但是随后我注意到问题是wp_generate_attachment_metadata正在创建一个空数组。 所以我将每个新图像都移到了正确的上载文件夹中,例如/ wp-content / uploads / 2019/09 / etc。
问题尚未解决,函数wp_generate_attachment_metadata仍在生成并且为空数组。
我注意到,如果我为仅具有宽度和高度的附加数据创建一个自定义数组,wordpress会生成媒体缩略图,但是我仍然没有得到文件大小,这对于优化图像的脚本来说是最重要的
代码如下:
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$filename = $new_file_path;
$filetype = wp_check_filetype( basename( $filename ), null );
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit'
);
// Insert the attachment.
$attach_id = wp_insert_attachment( $attachment, $filename, 0 );
echo '<b>' . $attach_id . '</b>' . '<br>';
// Generate the metadata for the attachment, and update the database record.
$new_image_info = getimagesize($new_file_url);
// $uploaded_file_info = get_attached_file($attach_id);
$custom_attach_data = array(
'width' => $new_image_info[0],
'height' => $new_image_info[1],
);
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata( $attach_id, $attach_data );
wp_update_attachment_metadata( $attach_id, $custom_attach_data );
// echo '<textarea>';
// var_dump($attach_data);
// echo '</textarea>';
set_post_thumbnail( $attach_id, $attach_id );
如您所见,我使用了函数wp_update_attachment_metadata的2倍,第二次是我的自定义数组。有了这个我得到的图像缩略图,但仍然有一些数据丢失。 我确定我错过了一些东西。
谢谢。
更新:我的图像路径现在类似于:
/var/www/html/demositeurl.com/wp-content/uploads/2019/09/20170610_205517_web_optimized.png
我还注意到filesize()函数不起作用,出现错误:
[24-Sep-2019 14:25:48 UTC] PHP Warning: filesize(): stat failed for /var/www/html/demosite.com/wp-content/uploads/2019/09/20170610_205517_web_optimized.png in /var/www/html/demosite.com/wp-content/plugins/demo-plugin/demo-main-file.php on line 91
起初,我认为这是一个权限问题,但是即使分配给www-data:www-data和775的所有内容仍然无法正常工作。也许这可能是真正的问题?