Intereting Posts
Создание настраиваемых ролей для использования в многостраничном экземпляре WordPress? Как напрямую вызвать функцию короткого кода и передать $ atts Включая файл или библиотеку из другого плагина Как перечислить все сетевые сайты на одной странице Страница «Параметры администратора». Сохранить как массив Как перенаправить с плагина Использование update_option () и get_option () – эхо эскиз строк с экранированием Что произойдет, если я перезаписал текущую таблицу wp_options резервной копией неделю назад? Разбиение страницы с помощью пользовательского запроса WP не работает Jetpack Infinite Scroll не будет срабатывать Как добавить классы в родительскую ссылку wp_list_category Миграция проблемы с Joomla на WP Проблема при отображении страниц с постоянным именем страницы Как включить enqueue_script для работы с зарегистрированным пользователем? wpml и языки с разными направлениями

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

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

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

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

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

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

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

Вы захотите подключиться к фильтру 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. На основе предложений в комментариях.