Добавить в название файла его ID и ID поста
Есть возможность изменять имена загружаемых файлов и присваивать им нужные значения
ВОПРОС: как добавить к имени файла его же ID и ID поста, куда врезаться ??
пример, было
image.jpg
нужно
image-p999-att777.jpg
Данная необходимость возникла для быстрого поиска постов по именам вложенных файлов - при обращении к сайту более 200 человек и поиску поста по имени файла, возникает большая нагрузка. Хочу искать файлы путем извлечения ID из имени файла
ранее юзал код для рандома имен, но его функционала стало мало
/****[022] Automatic rename */ function shapeSpace_maybe_append_random($filename) { $random = substr(str_shuffle('1234567890'), 0, 8); $append = apply_filters('usp_file_append_random', true, $filename, $random); if (!$append) return $filename; $info = pathinfo($filename); $ext = (isset($info['extension']) && !empty($info['extension'])) ? '.'. $info['extension'] : ''; $name = basename($filename, $ext) . $random; return $name . $ext; } add_filter('sanitize_file_name', 'shapeSpace_maybe_append_random', 10); // ещё можно так add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' ); function custom_upload_filter( $file ) { if ( ! isset( $_REQUEST['post_id'] ) ) { return $file; } $id = intval( $_REQUEST['post_id'] ); $parent_post = get_post( $id ); $post_name = sanitize_title( $parent_post->post_title ); $file['name'] = $post_name . '-' . $file['name']; return $file; }
Добавить ID родителя легко, а вот ID вложения так и не нашёл
$_REQUEST['post_id']
Это файлы которые загружаешь прямо со страницы записи?
Да, верно
get_post_thumbnail_id() есть
В момент загрузки файла ID вложения не получить, поскольку оно создается только при успешном завершении записи файла на диск.
Можно переименовать файл после, заменив всю необходимую информацию в скрытых полях записи-вложения
Уже спрашивал до этого но не получил ответ :
Как в вордпрес узнать формирование (значение) id будущего вложения, поста или таксономии - может быть тут бы и помогло в вопросе.
при создании записи WordPress пользуется функцией get_default_post_to_edit( $post_type, $create_in_db )
При $create_in_db, установленном в true, CMS стандартной функцией wp_insert_post() добавляет в базу данных новую запись со статусом "auto-draft" и возвращает полученный ID.
Как всегда все через задницу, то ничего, а то все сразу.
Решение частично помогло:
1
при таком варианте возвращает ID вложения на 1 единицу больше так как по правилам WP первым создается пост со статусом AUTO-DRAFT потом INHERIT.
Тем самым при переименовании изображения при загрузке можно сразу назначить имя файла с маской ID - ну а дальше решать уже пользователю, оставить текущий ID чтоб сделать некую маскировку изображений или сразу отнимать в php коде ЕДИНИЦУ.
2
код при единично загрузке работает отлично, а вот как при параллельной мультизагрузке покажет себя не знаю