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