Schimbarea numelui fișierului atașamentului

5 oct. 2011, 11:50:51
Vizualizări: 15.9K
Voturi: 12

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

0
Toate răspunsurile la întrebare 4
6
25

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

}
11 oct. 2011 07:35:38
Comentarii

explicație foarte precisă :)

Assad Nazar Assad Nazar
11 oct. 2011 08:01:40

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

Bakaburg Bakaburg
6 sept. 2013 00:51:38

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

Avishai Avishai
18 dec. 2016 00:41:39

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 :)

Way Too Simple Way Too Simple
17 mai 2019 17:50:26

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.

Way Too Simple Way Too Simple
17 mai 2019 22:10:14

Asigură-te de asemenea să rulezi wp_generate_attachment_metadata() ulterior, astfel încât toate miniaturile vor fi regenerate corespunzător.

KittMedia KittMedia
13 apr. 2022 16:09:20
Arată celelalte 1 comentarii
1

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.

17 oct. 2011 15:16:37
Comentarii

mulțumesc pentru răspunsul detaliat, am rulat codul și pare că s-a executat, dar nu sunt sigur dacă a schimbat ceva. Ar trebui să modifice post_name sau guid din obiectul attachment?

Robert Sinclair Robert Sinclair
1 feb. 2017 06:54:57
1

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ă.

10 oct. 2011 18:12:52
Comentarii

Aceasta rupe legătura WordPress către fișier, deoarece WordPress nu va înțelege că a avut loc o redenumire.

User User
17 oct. 2011 16:04:06
1
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

15 oct. 2011 12:14:25
Comentarii

Aceasta rupe previzualizările miniaturilor în panoul de control WP.

Drew Baker Drew Baker
23 nov. 2020 18:22:04