Intereting Posts
Включить файл класса в WordPress Как сохранить экземпляры виджета WP и параметры Как выполнять сложные запросы к базе данных (аналогично представлениям Drupal)? Worpdress не может создать каталог Как я могу предоставить доступ к моему настраиваемому плагину для пользователей ролей редакторов? Два домена для одного сайта, не работающего на мобильных устройствах Доступ к текущим данным пользователя в плагине Неправильный идентификатор Как требовать от пользователей не входить в систему для комментариев только на одной странице? Как перевести многострочные строки? Как увеличить количество сообщений для пользовательских типов сообщений? Как получить HTML-код боковой панели? Отключить создание содержимого по умолчанию во время установки Включить файл шаблона из плагина в тему Покажите счет автора общей суммы должностей, присваиваемых пользовательскому термину таксономии

Переименование файлов при загрузке с использованием переменных

Я хотел бы переименовать файлы во время загрузки и установить их имена в сообщение slug, к которым прикрепляются файлы, плюс некоторые случайные символы (простой инкрементный счетчик будет очень хорош), чтобы сделать имена файлов разными.

Другими словами, если я загружаю / прикрепляю изображения к сообщению, страница которого является «тестовой страницей», я бы хотел, чтобы изображения были переименованы «на лету» в test-page-slug-[C].[extension] :

  • тест-страницы пробковый-1.jpg
  • тест-страницы пробковый-2.jpg
  • и т. д., не имеет значения, каковы были исходные имена файлов.

Там есть этот плагин, Custom Upload Dir :

С помощью этого плагина вы можете создавать пути от дополнительных переменных, таких как: заголовок, идентификатор, категория, пост-автор, дата публикации и многое другое.

Как я могу сделать то же самое с именами файлов?

Solutions Collecting From Web of "Переименование файлов при загрузке с использованием переменных"

Вы захотите подключиться к фильтру wp_handle_upload_prefilter (который я не могу найти в документации, но кажется довольно простым). Я пробовал это на месте, и, похоже, это работает для меня:

 function wpsx_5505_modify_uploaded_file_names($arr) { // Get the parent post ID, if there is one if( isset($_REQUEST['post_id']) ) { $post_id = $_REQUEST['post_id']; } else { $post_id = false; } // Only do this if we got the post ID--otherwise they're probably in // the media section rather than uploading an image from a post. if($post_id && is_numeric($post_id)) { // Get the post slug $post_obj = get_post($post_id); $post_slug = $post_obj->post_name; // If we found a slug if($post_slug) { $random_number = rand(10000,99999); $arr['name'] = $post_slug . '-' . $random_number . '.jpg'; } } return $arr; } add_filter('wp_handle_upload_prefilter', 'wpsx_5505_modify_uploaded_file_names', 1, 1); 

В моем тестировании кажется, что в сообщениях есть только slug, если у вас есть довольно постоянные ссылки, поэтому я добавил чек, чтобы убедиться, что перед переименованием файла есть пуля. Вы также захотите рассмотреть вопрос о типе файла, который я здесь не сделал – я только предположил, что это jpg.

РЕДАКТИРОВАТЬ

Как указано в комментарии, эта дополнительная функция изменяет некоторые мета-атрибуты загруженного изображения. Кажется, не позволяет вам устанавливать текст ALT, и по какой-то причине значение, которое вы задали как «подпись», фактически назначается как описание. Тебе придётся обезьяну. Я нашел этот фильтр в функции wp_read_image_metadata (), которая находится в wp-admin / includes / image.php. Это то, что загружают средства массовой информации и функции wp_generate_attachment_metadata, чтобы вытащить метаданные из изображения. Вы можете взглянуть туда, если хотите узнать больше.

 function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) { // Get the parent post ID, if there is one if( isset($_REQUEST['post_id']) ) { $post_id = $_REQUEST['post_id']; } else { $post_id = false; } // Only do this if we got the post ID--otherwise they're probably in // the media section rather than uploading an image from a post. if($post_id && is_numeric($post_id)) { // Get the post title $post_title = get_the_title($post_id); // If we found a title if($post_title) { $meta['title'] = $post_title; $meta['caption'] = $post_title; } } return $meta; } add_filter('wp_read_image_metadata', 'wpsx_5505_modify_uploaded_file_meta', 1, 3); 

Отредактировано 04/04/2012, чтобы вывести идентификатор сообщения из REQUEST obj, а не последовательно проверять GET и POST. На основе предложений в комментариях.