Intereting Posts
Вывод содержимого CSV из CPT в виджет с табло Есть ли способ предотвратить изменение Редактором моего HTML WPAlchemy: Как выводить значения? Как добавить пользовательский виджет «Текст» в диспетчер Appearance из functions.php? Заголовок сообщения из выбранной категории в меню Если пользовательский заголовок изображения не существует, заголовок текстового заголовка parse_tax_query вызывает исчезновение навигационного меню Не удалось получить доступ к пользовательскому плагину Разрешить читателю переупорядочивать сообщения для себя (самые старые) передавать параметры через переменную в WP_QUERY Woocommerce 3.1 Добавить изображение товара для подтверждения заказа электронной почты не работает Авто-почта для нескольких сайтов, таких как Posterous? Добавить дополнительные поля для пользователей и получить значение в настройке сети у супер администратора есть кнопки tinyMCE, а у обычного администратора нет add_menu_page не показывает ссылку в меню, однако вы можете получить к ней доступ через url

Изменить имя файла вложения

Есть ли функция, которая позволяет мне изменить имя файла вложения на основе идентификатора прикрепленного файла?

Благодаря! Деннис

Solutions Collecting From Web of "Изменить имя файла вложения"

Это позволит вам переименовать вложение сразу после его загрузки:

add_action('add_attachment', 'rename_attacment'); function rename_attacment($post_ID){ $post = get_post($post_ID); $file = get_attached_file($post_ID); $path = pathinfo($file); //dirname = File Path //basename = Filename.Extension //extension = Extension //filename = Filename $newfilename = "NEW FILE NAME HERE"; $newfile = $path['dirname']."/".$newfilename.".".$path['extension']; rename($file, $newfile); update_attached_file( $post_ID, $newfile ); } 

Случаи использования

Функция работает для

  • Добавление файлов
  • Обновление файлов (да, также для уже существующих файлов)
  • Несколько файлов

Случайные случаи

Он прерывает автоматические задания, выполняемые wordpress автоматически, или если целевые типы файлов или типы mime не выполняются.

Плюсы

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

 function wpse30313_update_attachment_names($post_ID) { // Abort if WP does an autosave if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return; # >>>> SET // New file name: $new_file_name = "___"; // Best would be to take the post name as file name instead of a custom title: # $post_data = get_post( $post_ID ); # $new_file_name = $post_data->post_name; // The file types we want be changed: $allowed_types = array( 'image' ); // The mime types we want to be changed: $allowed_ext = array( 'jpg' ,'jpeg' ,'gif' ,'png' ); # <<<< SET // Appended by post ID for collision safety $new_file_name = "{$new_file_name}-{$post_ID}"; // get all attached files $attachments = get_children( array( 'post_type' => 'attachment' ,'post_parent' => $post_ID ) ); // Bulk updating attached file names foreach ( $attachments as $att ) { $att_ID = $att->ID; // Append attachment ID (collision safety) // Also allows sorting files by post & then attchment ID $new_name = "{$new_file_name}-{$att_ID}"; $mime_type = explode( "/", get_post_mime_type( $att->ID ) ); $file_type = $mime_type[0]; $mime_type = $mime_type[1]; // Skip file types we don't want to change if ( ! in_array( $file_type, $allowed_types ) ) continue; // Skip mime types we don't want to change if ( ! in_array( $mime_type, $allowed_ext ) ) continue; // Get current file info $file_path = get_attached_file( $att->ID ); $path = pathinfo( $file_path ); $dir = trailingslashit( $path['dirname'] ); $ext = $path['extension']; // Build final name $final = "{$dir}{$new_name}.{$ext}"; // Skip if the path was already changed on upload // If we don't set this, the function wouldn't work for older files if ( $file_path == $final ) continue; // Update attachment-post meta info for file rename( $file_path, $final ); update_attached_file( $att_ID, $final ); } return; } add_action( 'add_attachment', 'wpse30313_update_attachment_names' ); add_action( 'edit_attachment', 'wpse30313_update_attachment_names' ); 

Функция должна быть добавлена ​​в ваш файл functions.php или (лучше) в виде отдельного небольшого плагина. Просто добавьте комментарий к плагину сверху, загрузите его в папку плагинов и активируйте.

Я бы использовал rename PHP и путь к файлу, заданному get_attached_file .

 function rename_file( $post_id, $newname ) { $file = get_attached_file( $post_id ); rename($file,dirname($file).$newname) } 

Учтите, что это не было протестировано, и вы должны соблюдать предельные меры предосторожности при работе с файлами. Вероятно, для его работы необходимо изменить, но может быть хорошей отправной точкой. Надеюсь это поможет.

Дайте мне знать, если это поможет, и я изменю код на фактический рабочий код.

 add_action('add_attachment', 'rename'); function rename($post_ID){ $post = get_post($post_ID); $file = get_attached_file($post_ID); $path = pathinfo($file); $newfilename = "mynewfilename"; $newfile = $path['dirname']."/".$newfilename.".".$path['extension']; rename($file, $newfile); update_attached_file( $post_ID, $newfile ); } 

Ссылка http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment