wp_generate_attachment_metadata返回一个空数组

时间:2019-09-25 17:17:39

标签: php wordpress plugins media

我正在制作用于图像优化的自定义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的所有内容仍然无法正常工作。也许这可能是真正的问题?

0 个答案:

没有答案