wp_generate_attachment_metadata возвращает пустой массив - PullRequest
0 голосов
/ 25 сентября 2019

Я делаю собственный плагин wp для оптимизации изображений.Я в тот момент, когда вы выбираете изображение, скрипт начинает оптимизировать и помещает новое изображение в папку загрузки.Проблема в том, что я не могу правильно зарегистрировать новое изображение в WP Media, я уже видел много сообщений об этом, но все еще не решил.

Основная проблема заключается в том, что я могу видетьфайл в моем wp media, но без миниатюр или другой информации, такой как размер файла, ширина и высота изображения.

В первый раз мой скрипт загружал его файлы в / 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 );

Как вы можете видеть, я использую 2 раза функцию wp_update_attachment_metadata, и второй раз - мой пользовательский массив.С этим я получаю миниатюру изображения, но все еще отсутствуют некоторые данные.Я уверен, что что-то упустил.

Заранее спасибо.

Обновление: мой путь к изображению теперь выглядит примерно так:

/var/www/html/demositeurl.com/wp-content/uploads/2019/09/20170610_205517_web_optimized.png

Я также заметил, что размер файла() функция не работает, я получаю сообщение об ошибке:

[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, до сих пор нетработает.Может быть, это может быть реальной проблемой?

...