WordPress - генерация лишних записей в DB '_wp_attachment_metadata' в таблице 'wp_postmeta' при фронтенд загрузке изображений
Реализовал страницу для добавления записи с возможность прикреплять файлы.
Столкнулся с проблемой если этой формой пользуется авторизованный пользователь все работает как положено:
- создает запись;
- загружает файлы, создает вложения, делает связь запись + вложения;
- генерирует дополнительные размеры изображений;
- регистрирует мета данные _wp_attachment_metadata в wp_postmeta. В таблице есть соответствующая запись вида (все работает как надо!):
a:5:{s:5:"width";i:800;s:6:"height";i:598;s:4:"file";s:24:"1/31/13/134840-2579.jpeg";s:5:"sizes";a:1:{s:9:"thumbnail";a:4:{s:4:"file";s:24:"134840-2579-300x224.jpeg";s:5:"width";i:300;s:6:"height";i:224;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
Однако если этой формой пользуется не авторизованный пользователь, то:
- создает запись;
- загружает файлы, создает вложения, делает связь запись + вложения;
- генерирует дополнительные размеры изображений;
- регистрирует мета данные 3 раза, в таблице wp_postmeta на одно вложение (post_id) - создается 3 саписи _wp_attachment_metadata. Что характерно в первой созданной мета записи нет данных о thumbnail, в следующих двух (идентичных) есть данные от thumbnail. На выходе имеем - WP не понимает что у изображения есть дополнительный размер (миниатюра) т.к. он ее не находит описание thumbnail в первой попавшейся записи _wp_attachment_metadata. Вот такие 3 записи создаются в DB - в следующем порядке:
1.
a:5:{s:5:"width";i:800;s:6:"height";i:533;s:4:"file";s:22:"2/3/6/063740-5935.jpeg";s:5:"sizes";a:0:{}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
2.
a:5:{s:5:"width";i:800;s:6:"height";i:533;s:4:"file";s:22:"2/3/6/063740-5935.jpeg";s:5:"sizes";a:1:{s:9:"thumbnail";a:4:{s:4:"file";s:24:"063740-5935-300x200.jpeg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
3.
a:5:{s:5:"width";i:800;s:6:"height";i:533;s:4:"file";s:22:"2/3/6/063740-5935.jpeg";s:5:"sizes";a:1:{s:9:"thumbnail";a:4:{s:4:"file";s:24:"063740-5935-300x200.jpeg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}
Для загрузки файлов и создания вложений использую media_handle_upload() такую функцию:
function insert_attachment($file,$post) {
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
$attach = media_handle_upload( $file, $post, array('post_author' => 1) );
if( !is_wp_error( $attach ) ) return $attach;
else return false;
}