Changer le nom du fichier joint

9

Existe-t-il une fonction qui me permet de changer le nom de fichier d'une pièce jointe, en fonction de l'ID de pièce jointe que j'ai?

Merci! Dennis

    
posée FLX 05.10.2011 - 10:50

4 réponses

20

Cela vous permettra de renommer une pièce jointe dès qu'elle sera téléchargée:

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

}
    
réponse donnée Ijaas 11.10.2011 - 06:35
4

Cas d'utilisation

La fonction fonctionne pour

  • Ajout de fichiers
  • Mise à jour des fichiers (oui, même pour les fichiers déjà présents)
  • Plusieurs fichiers

Cas sans utilisation

Il abandonne automatiquement les tâches enregistrées automatiquement par wordpress ou si les types de fichiers ou les types mime ciblés ne sont pas respectés.

Goodies

Vous pouvez définir le nom du fichier, les types de fichier & types de mime que vous souhaitez modifier à l'intérieur du fonction avant la boucle foreach . Le fichier obtient l'ID de publication, puis l'ID de pièce jointe, ce qui vous permet de télécharger et de modifier en toute sécurité plusieurs fichiers à la fois. Cela concerne également la commande des fichiers par (premier) identifiant de poste et (second) identifiant de pièce jointe.

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

La fonction doit être ajoutée à votre fichier functions.php ou (mieux) en tant que petit plugin séparé. Ajoutez simplement un commentaire de plugin en haut, chargez-le dans le dossier plugins et activez-le.

    
réponse donnée kaiser 17.10.2011 - 14:16
3

J'utiliserais le rename de PHP et le chemin d'accès au fichier indiqué par get_attached_file .

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

REMARQUEZ que cela n’a pas été testé et que vous devez prendre des précautions extrêmes lorsque vous travaillez avec des fichiers. Il faut probablement changer pour que cela fonctionne, mais peut être un bon point de départ. J'espère que cela vous aidera.

Faites-moi savoir si cela vous aide et je changerai le code en code de travail réel.

    
réponse donnée Naoise Golden 10.10.2011 - 17:12
3
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 );

}

Référence enlace enlace

    
réponse donnée Mohit Bumb 15.10.2011 - 11:14

Lire d'autres questions sur les étiquettes