Ändern Sie den Dateinamen der Anlage

Gibt es eine function, die es mir ermöglicht, den Dateinamen eines Anhangs zu ändern, basierend auf der Anlagen-ID, die ich habe?

Vielen Dank! Dennis

Solutions Collecting From Web of "Ändern Sie den Dateinamen der Anlage"

So können Sie einen Anhang umbenennen, sobald er hochgeladen wurde:

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 ); } 

Anwendungsfälle

Die function funktioniert für

  • Dateien hinzufügen
  • Dateien aktualisieren (ja, auch für bereits vorhandene Dateien)
  • Mehrere Dateien

Nicht verwendbare Fälle

Es bricht Autosave-Jobs ab, die von WordPress automatisch ausgeführt werden oder wenn die angepeilten Dateitypen oder Mime-Typen nicht erfüllt werden.

Leckereien

Sie können den Dateinamen, Dateitypen und MIME-Typen, die Sie ändern möchten, innerhalb der function vor der foreach Schleife foreach . Die Datei erhält die Post-ID und anschließend die Anhangs-ID, sodass Sie mehrere Dateien gleichzeitig sicher hochladen und ändern können. Dies sorgt auch für die Bestellung der Dateien durch (erste) Post-ID und (zweite) Anhangs-ID.

 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' ); 

Die function sollte zu Ihrer functions.php-Datei oder (besser) als separates kleines Plugin hinzugefügt werden. Fügen Sie einfach einen Plugin-Kommentar hinzu, laden Sie ihn in den Plugins-Ordner und aktivieren Sie ihn.

Ich würde die rename PHP und den Pfad zu der von get_attached_file angegebenen Datei get_attached_file .

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

Beachten Sie, dass dies nicht getestet wurde und Sie extreme Vorsicht bei der Arbeit mit Dateien benötigen. Es muss wahrscheinlich geändert werden, damit es funktioniert, aber es könnte ein guter Ausgangspunkt sein. Hoffe das hilft.

Lassen Sie es mich wissen, wenn es hilft, und ich werde den Code in den tatsächlichen Arbeitscode ändern.

 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 ); } 

Referenz http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment