Некоторые вебмастера не уделяют достаточно внимания названиям файлов, закачиваемых в блог. Конечно, ничего страшного в этом нет, и всегда можно задать заголовок, текст, подпись и описание файла в библитеке. Однако физические имя закачанного файла останется прежним. Со временем в блоге накопится достаточно файлов с ни о чем не говорящими названиями IMG05XX или 120204-01, по которым трудно ориентироваться. Чтобы привести в порядок названия файлов, можно воспользоваться кодом, автоматически переименовывающим файлы при их добавлении в пост.
Для этого нужно вставить в файл functions.php используемой вами темы:
function mfrh_media_send_to_editor($html, $attachment_id, $attachment) { $post =& get_post($attachment_id); if ( substr($post->post_mime_type, 0, 5) == 'image' ) { $url = wp_get_attachment_url($attachment_id); $align = !empty($attachment['align']) ? $attachment['align'] : 'none'; $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium'; $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : ''; $rel = ( $url == get_attachment_link($attachment_id) ); return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt); } return $html; } function mfrh_attachment_fields_to_save( $post, $attachment ) { $sanitized_media_title = sanitize_title( $attachment['post_title'] ); if ( $post['post_name'] == $sanitized_media_title || empty( $sanitized_media_title ) ) { return $post; } $old_filepath = get_attached_file( $post['ID'] ); $path_parts = pathinfo( $old_filepath ); $directory = $path_parts['dirname']; $old_filename = $path_parts['basename']; $ext = str_replace( 'jpeg', 'jpg', $path_parts['extension'] ); $media_library_mode = !isset($attachment['image-size']); $new_filename = strtolower( wp_unique_filename( $directory, $sanitized_media_title . '.' . $ext ) ); $new_filepath = $directory . '/' . $new_filename ; if ( file_exists( $new_filepath ) === true ) { trigger_error( "Media File Renamer wants to rename a file to " + $new_filepath + " but it already exists.", E_USER_NOTICE ); return $post; } $noext_old_filename = str_replace( '.' . $ext, '', $old_filename ); $noext_new_filename = str_replace( '.' . $ext, '', $new_filename ); $post['old_filename'] = $noext_old_filename; $post['new_filename'] = $noext_new_filename; $original_filename = get_post_meta( $post['ID'], '_original_filename', true ); if ( empty( $original_filename ) ) add_post_meta( $post['ID'], '_original_filename', $old_filename ); rename( $old_filepath, $new_filepath ); $meta = wp_get_attachment_metadata( $post['ID'] ); $meta['file'] = str_replace( $noext_old_filename, $noext_new_filename, $meta['file'] ); $meta["url"] = str_replace( $noext_old_filename, $noext_new_filename, $attachment['url'] ); $article = ""; if ( $media_library_mode && !empty($post['post_parent']) ) { $article = get_post( $post['post_parent'] ); $article->post_content = str_replace( $old_filename, $new_filename, $article->post_content ); } foreach ( $meta['sizes'] as $size => $meta_size ) { $meta_old_filename = $meta['sizes'][$size]['file']; $meta_old_filepath = $directory . '/' . $meta_old_filename; $meta_new_filename = str_replace( $noext_old_filename, $noext_new_filename, $meta_old_filename ); $meta_new_filepath = $directory . '/' . $meta_new_filename; if ( file_exists($meta_old_filepath) && ((!file_exists($meta_new_filepath)) || is_writable($meta_new_filepath)) ) { rename($meta_old_filepath, $meta_new_filepath); $meta['sizes'][$size]['file'] = $meta_new_filename; } if ( $media_library_mode && !empty( $article ) ) { $article->post_content = str_replace( $meta_old_filename, $meta_new_filename, $article->post_content ); } } wp_update_attachment_metadata( $post['ID'], $meta ); update_attached_file( $post['ID'], $new_filepath ); $post['post_name'] = $sanitized_media_title; $post['guid'] = $meta["url"]; wp_update_post( $post ); if ( $media_library_mode && !empty( $article ) ) { wp_update_post( $article ); } if ( isset( $_REQUEST['_wp_original_http_referer'] ) && strpos( $_REQUEST['_wp_original_http_referer'], '/wp-admin/' ) === false ) { $_REQUEST['_wp_original_http_referer'] = get_permalink( $post['ID'] ); } return $post; } add_filter( 'attachment_fields_to_save', 'mfrh_attachment_fields_to_save', 1, 2 ); add_filter( 'media_send_to_editor', 'mfrh_media_send_to_editor', 20, 3 );
Эти две функции автоматически переименовывают файлы, вставляемые в посты, при их сохранении. Новые имена формируются по названию постов. Если стоит плагин Cyr2Lat, то имена файлов формуются латиницей. Если кому-то не нравится автоматический способ формирования названия, то можно воспользоваться плагином Faster Image Insert. Он умеет переименовывать по заданной маске сразу все файлы, добавленные в пост, пронумеровывая их по порядку.
НЕ РАБОТАЕТ
Попробуйте плагин File Renaming on upload.
Он тоже не работает, дело в том, что использую wpgrabber 2.1.1 и нужно:
найти решения, а именно переименования изображений,
например из
site.ru/wp-content/uploads/2015/11/a77d867ecd27b9bb1389a8cb4860534c.jpg
НА
site.ru/wp-content/uploads/2015/11/name-iz-zagolovka.jpg
Я использую wpgrabber 2.1.1, картинка загружается с “иероглифами”, а нужно что
бы брало из заголовка статьи, и переименовало изображения автоматически.
Работает и способ без плагинов и плагины. Не используйте wpgrabber.
можете показать до и после? если он работает!
И я вставлял код, у меня не работает, может поможете мне или хоть покажите пример
До: https://n-wp.ru/wp-content/uploads/2015/11/n-wp.ru_20151118231208.jpg
После: https://n-wp.ru/wp-content/uploads/2015/11/n-wp.ru_20151118231215.jpg
Во время загрузки имя файла изменяется по определенной маске.
Самый простой способ – плагин File Renaming on upload (ссылка в моем комментарии выше).
А у вас стоит плагин Cyr2Lat или подобный?
Напишите мне на почту, обсудим за доп. плату.
Приветствую! Подскажите как пакетно (массово) изменить уже загруженные картинки, а именно интересует “отражение по вертикали”.
Не уверен, что это тривиальная задача для встроенного редактора изображений. Как вариант, можно скачать всю папку uploads, изменить все изображения в ней с помощью офлайновой программы, не изменяя расположения, названия и формата файлов, а потом закачать папку uploads с измененными файлами поверх старой. Так даже быстрее будет, да и безопаснее (можно создать резервную копию исходных файлов).
Здравствуйте. Подскажите пожалуйста, я вставила код в functions.php используемой темы, но переименование не происходит. В чем может быть проблема?
Заранее спасибо.