Modificare il nome del file di un allegato

5 ott 2011, 11:50:51
Visualizzazioni: 15.9K
Voti: 12

Esiste una funzione che mi permette di modificare il nome del file di un allegato, basandomi sull'ID dell'allegato che ho?

Grazie! Dennis

0
Tutte le risposte alla domanda 4
6
25

Questo ti permetterà di rinominare un allegato non appena viene caricato:

add_action('add_attachment', 'rename_attachment');
function rename_attachment($post_ID){

    $file = get_attached_file($post_ID);
    $path = pathinfo($file);
        //dirname   = Percorso del file
        //basename  = NomeFile.Estensione
        //extension = Estensione
        //filename  = Nome file

    $newfilename = "NUOVO NOME FILE QUI";
    $newfile = $path['dirname']."/".$newfilename.".".$path['extension'];

    rename($file, $newfile);    
    update_attached_file( $post_ID, $newfile );

}
11 ott 2011 07:35:38
Commenti

spiegato in modo molto preciso :)

Assad Nazar Assad Nazar
11 ott 2011 08:01:40

uhm, ricevo questo errore da rename(): il wrapper http non supporta il rinominare

Bakaburg Bakaburg
6 set 2013 00:51:38

C'è un errore di battitura qui. La funzione dovrebbe chiamarsi rename_attachment.

Avishai Avishai
18 dic 2016 00:41:39

Penso che per chiarezza sia meglio se chiami $post_ID come $attach_ID o qualcosa di simile, perché potrebbe essere confuso con l'ID del post genitore, mentre è pensato per essere l'ID dell'allegato. Buona risposta :)

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

Nota che questo non cambia il guid dell'allegato, quindi il codice che si basa sul guid per ottenere la sorgente dell'immagine ad esempio non funzionerà. Sebbene in generale non dovresti cambiare il guid di un post, in questa situazione potrebbe essere saggio aggiornare anche il guid.

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

Assicurati anche di eseguire wp_generate_attachment_metadata() successivamente in modo che tutte le miniature vengano rigenerate correttamente.

KittMedia KittMedia
13 apr 2022 16:09:20
Mostra i restanti 1 commenti
1

Casi d'Uso

La funzione è utile per:

  • Aggiungere file
  • Aggiornare file (sì, anche per file già presenti)
  • Gestire più file contemporaneamente

Casi in cui Non Funziona

Interrompe l'operazione per i salvataggi automatici eseguiti automaticamente da WordPress o se i tipi di file o i mime type specificati non corrispondono.

Funzionalità Aggiuntive

Puoi impostare il nome del file, i tipi di file e i mime type che desideri modificare all'interno della funzione prima del ciclo foreach. Il file otterrà l'ID del post e poi l'ID dell'allegato aggiunti, così puoi caricare e modificare più file in sicurezza. Questo sistema si occupa anche di ordinare i file prima per ID del post e poi per ID dell'allegato.

function wpse30313_update_attachment_names($post_ID)
{
    // Interrompe se WordPress sta eseguendo un salvataggio automatico
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
        return;

    # >>>> IMPOSTAZIONI
        // Nuovo nome del file:
        $new_file_name = "___";

        // Sarebbe meglio usare il nome del post come nome del file invece di un titolo personalizzato:
        # $post_data = get_post( $post_ID );
        # $new_file_name = $post_data->post_name;

        // Tipi di file che vogliamo modificare:
        $allowed_types = array(
            'image'
        );

        // Mime type che vogliamo modificare:
        $allowed_ext = array(
             'jpg'
            ,'jpeg'
            ,'gif'
            ,'png'
        );
    # <<<< IMPOSTAZIONI

    // Aggiunge l'ID del post per evitare conflitti
    $new_file_name = "{$new_file_name}-{$post_ID}";

    // Ottiene tutti gli allegati
    $attachments = get_children( array( 
         'post_type'    => 'attachment'
        ,'post_parent'  => $post_ID
    ) );

    // Aggiornamento massivo dei nomi dei file allegati
    foreach ( $attachments as $att )
    {
        $att_ID     = $att->ID;
        // Aggiunge l'ID dell'allegato (per evitare conflitti)
        // Permette anche di ordinare i file prima per post e poi per ID allegato
        $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];

        // Salta i tipi di file che non vogliamo modificare
        if ( ! in_array( $file_type, $allowed_types ) )
            continue;
        // Salta i mime type che non vogliamo modificare
        if ( ! in_array( $mime_type, $allowed_ext ) )
            continue;

        // Ottiene le informazioni attuali del file
        $file_path = get_attached_file( $att->ID );
        $path   = pathinfo( $file_path );
        $dir    = trailingslashit( $path['dirname'] );
        $ext    = $path['extension'];

        // Costruisce il nome finale
        $final  = "{$dir}{$new_name}.{$ext}";

        // Salta se il percorso è già stato modificato durante il caricamento
        // Senza questa condizione, la funzione non funzionerebbe per file più vecchi
        if ( $file_path == $final )
            continue;

        // Aggiorna i meta dati dell'allegato per il 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' );

La funzione dovrebbe essere aggiunta al tuo file functions.php o (meglio) come un piccolo plugin separato. Basta aggiungere un commento di plugin all'inizio, caricarlo nella cartella dei plugin e attivarlo.

17 ott 2011 15:16:37
Commenti

grazie per la risposta dettagliata, ho eseguito il codice e sembra aver funzionato, ma non sono sicuro se abbia cambiato qualcosa. Dovrebbe modificare il post_name o il guid dell'oggetto allegato?

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

Userei la funzione PHP rename e il percorso del file fornito da get_attached_file.

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

NOTA che questo codice non è stato testato e dovresti usare estrema cautela quando lavori con i file. Probabilmente ha bisogno di modifiche per funzionare correttamente, ma può essere un buon punto di partenza. Spero che sia utile.

Fammi sapere se ti è stato d'aiuto e modificherò il codice con la versione effettivamente funzionante.

10 ott 2011 18:12:52
Commenti

Questo interrompe il collegamento di WordPress al file, poiché WordPress non riconoscerà che è avvenuto un rinominio.

User User
17 ott 2011 16:04:06
1
add_action('add_attachment', 'rinomina');
function rinomina($post_ID){

    $post = get_post($post_ID);
    $file = get_attached_file($post_ID);
    $path = pathinfo($file);
    $newfilename = "mionuovonomefile";
    $newfile = $path['dirname']."/".$newfilename.".".$path['extension'];

    rename($file, $newfile);    
    update_attached_file( $post_ID, $newfile );

}

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

15 ott 2011 12:14:25
Commenti

Questo interrompe le anteprime delle miniature nella dashboard di WP.

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