Schimbarea numelui fișierului atașamentului
Există o funcție care îmi permite să schimb numele fișierului unui atașament, pe baza ID-ului atașamentului pe care îl am?
Mulțumesc! Dennis

Acest lucru vă va permite să redenumiți un fișier atașat imediat ce acesta este încărcat:
add_action('add_attachment', 'rename_attachment');
function rename_attachment($post_ID){
$file = get_attached_file($post_ID);
$path = pathinfo($file);
//dirname = Calea fișierului
//basename = NumeFișier.Extensie
//extension = Extensie
//filename = Numele fișierului
$newfilename = "NOUL NUME AICI";
$newfile = $path['dirname']."/".$newfilename.".".$path['extension'];
rename($file, $newfile);
update_attached_file( $post_ID, $newfile );
}

uhm, primesc această eroare rename(): http wrapper nu suportă redenumirea

Există o greșeală de scriere aici. Funcția ar trebui să se numească rename_attachment
.

Cred că pentru claritate ar fi mai bine să denumești $post_ID ca $attach_ID sau ceva similar, deoarece ar putea fi confundat cu ID-ul postării părinte, în timp ce este destinat să fie ID-ul atașamentului. Răspuns bun :)

Te rog să observi că acest lucru nu schimbă guid-ul atașamentului, așa că codul care se bazează pe guid pentru a obține sursa imaginii, de exemplu, nu va funcționa. Deși, în general, nu ar trebui să modifici guid-ul unei postări, în această situație ar putea fi înțelept să actualizezi și guid-ul.

Cazuri de Utilizare
Funcția funcționează pentru
- Adăugarea fișierelor
- Actualizarea fișierelor (da, și pentru fișierele deja existente)
- Fișiere multiple
Cazuri în care nu se utilizează
Funcția se oprește pentru sarcinile de salvare automată, efectuate automat de WordPress sau dacă tipurile de fișiere sau tipurile mime țintă nu sunt îndeplinite.Bonusuri
Puteți seta numele fișierului, tipurile de fișiere și tipurile mime pe care doriți să le modificați în interiorul funcției înainte de bucla foreach
. Fișierul primește ID-ul postului și apoi ID-ul atașamentului adăugat, astfel încât puteți încărca și modifica în siguranță mai multe fișiere simultan. Acest lucru asigură și ordonarea fișierelor după (primul) ID al postului și (al doilea) ID al atașamentului.
function wpse30313_update_attachment_names($post_ID)
{
// Oprire dacă WordPress face o salvare automată
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return;
# >>>> SETARE
// Numele nou al fișierului:
$new_file_name = "___";
// Cel mai bine ar fi să luați numele postului ca nume al fișierului în loc de un titlu personalizat:
# $post_data = get_post( $post_ID );
# $new_file_name = $post_data->post_name;
// Tipurile de fișiere pe care dorim să le modificăm:
$allowed_types = array(
'image'
);
// Tipurile mime pe care dorim să le modificăm:
$allowed_ext = array(
'jpg'
,'jpeg'
,'gif'
,'png'
);
# <<<< SETARE
// Adăugat ID-ul postului pentru siguranță
$new_file_name = "{$new_file_name}-{$post_ID}";
// Obține toate fișierele atașate
$attachments = get_children( array(
'post_type' => 'attachment'
,'post_parent' => $post_ID
) );
// Actualizare în masă a numelor fișierelor atașate
foreach ( $attachments as $att )
{
$att_ID = $att->ID;
// Adăugare ID atașament (siguranță)
// Permite și sortarea fișierelor după post și apoi ID atașament
$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];
// Sari peste tipurile de fișiere pe care nu vrem să le modificăm
if ( ! in_array( $file_type, $allowed_types ) )
continue;
// Sari peste tipurile mime pe care nu vrem să le modificăm
if ( ! in_array( $mime_type, $allowed_ext ) )
continue;
// Obține informațiile curente ale fișierului
$file_path = get_attached_file( $att->ID );
$path = pathinfo( $file_path );
$dir = trailingslashit( $path['dirname'] );
$ext = $path['extension'];
// Construiește numele final
$final = "{$dir}{$new_name}.{$ext}";
// Sari dacă calea a fost deja schimbată la încărcare
// Dacă nu setăm asta, funcția nu va funcționa pentru fișierele vechi
if ( $file_path == $final )
continue;
// Actualizează meta-informațiile postului de atașament pentru fișier
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' );
Funcția ar trebui adăugată în fișierul functions.php sau (mai bine) ca un mic plugin separat. Adăugați doar un comentariu de plugin în partea de sus, încărcați-l în folderul de plugin-uri și activați-l.

Aș folosi funcția PHP rename
și calea către fișier furnizată de get_attached_file
.
function rename_file( $post_id, $newname ) {
$file = get_attached_file( $post_id );
rename($file,dirname($file).$newname)
}
NOTĂ: Acest cod nu a fost testat și ar trebui să fiți extrem de precaut când lucrați cu fișiere. Probabil că este necesară modificarea codului pentru a funcționa, dar poate fi un bun punct de plecare. Sper că vă ajută.
Spuneți-mi dacă v-a ajutat și voi actualiza codul cu versiunea funcțională corectă.

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 );
}
Referință http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment
