Вопрос или проблема
Мне нужно переименовать изображения, загруженные пользователем, когда они публикуют на моем сайте.
У меня есть код, который идеально работает для сохранения изображения и делает его частью поста. Но я хочу, чтобы изображения были переименованы так, чтобы в их имени файла содержался заголовок поста.
Код, который у меня есть:
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
$img_id01 = media_handle_upload( 'img_main', $postID );
update_post_meta($postID, 'img_id01', $img_id01);
Я не могу это протестировать, потому что у меня нет вашего кода, но, возможно, вы сможете получить от него некоторые идеи:
add_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 );
$img_id01 = media_handle_upload( 'img_main', $postID );
remove_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 );
function custom_image_name( $filename, $ext ) {
global $postID;
$post = get_post( $postID );
return $filename . '-' . $post->post_name . $ext;
}
Это не очень элегантно, потому что $postID
должен находиться в глобальной области видимости, но это может сработать.
Ответ или решение
Для решения задачи по переименованию загруженных изображений в WordPress с использованием функции media_handle_upload
, можно применить фильтр wp_unique_filename
. Это позволит переназначить имя файла, чтобы оно включало заголовок поста, к которому принадлежит изображение.
Шаг 1: Подключение необходимых файлов
Первым делом вам нужно убедиться, что вы подключили все необходимые файлы для работы с медиафайлами:
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
Шаг 2: Добавление фильтра для переименования файла
Следующий шаг заключается в добавлении фильтра wp_unique_filename
. Функция custom_image_name
будет автоматически переименовывать загруженные изображения на основе заголовка поста, который вы можете получить с помощью функции get_post
.
add_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 );
function custom_image_name( $filename, $ext ) {
global $post_ID; // Важно отметить, что мы используем глобальную переменную $post_ID.
// Получаем данные поста
$post = get_post( $post_ID );
// Формируем новое имя файла
$new_filename = sanitize_title($post->post_title) . '-' . uniqid(); // Уникальный идентификатор для избежания конфликтов
return $new_filename . $ext; // Возвращаем новое имя файла с расширением
}
Шаг 3: Обработка загрузки изображения
Когда вы загружаете изображение с использованием функции media_handle_upload
, добавьте дополнительный код для временного хранения $post_ID
.
$post_ID = /* получите ID поста, к которому будет прикреплено изображение */;
$img_id01 = media_handle_upload( 'img_main', $post_ID );
remove_filter( 'wp_unique_filename', 'custom_image_name', 10, 2 ); // Удаляем фильтр после загрузки
update_post_meta($post_ID, 'img_id01', $img_id01);
Заключение
Предложенное решение включает в себя контроль за генерацией уникальных имен файлов, основанных на заголовке поста. Это не только даст возможность легко идентифицировать загруженные изображения, но и поможет оптимизировать SEO, изображающие файлы будут иметь описательные названия, что может улучшить видимость в поисковых системах.
Учтите, что перед использованием данной реализации целесообразно протестировать её на локальном сервере или тестовом окружении. Это поможет исключить ошибки и конфликты с другими плагинами или темами.
Такое внимание к деталям не только улучшит качество вашего кода, но и сделает ваш сайт более профессиональным и удобным для пользователей.