web-dev-qa-db-fra.com

Changer le nom du fichier joint

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

9
FLX

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

add_action('add_attachment', 'rename_attachment');
function rename_attachment($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 );

}
20
Ijaas

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 de non-utilisation

Goodies

Vous pouvez définir le nom de fichier, les types de fichier et les types mime que vous souhaitez modifier dans la fonction avant la boucle foreach. Le fichier reçoit 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 s’occupe également de la commande des fichiers par (premier) post ID et (deuxième) 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.

4
kaiser
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 http://codex.wordpress.org/Function_Reference/update_attached_filehttp://wordpress.org/tags/add_attachment

3
Mohit Bumb

Je voudrais utiliser PHP rename et le chemin d'accès au fichier donné par get_attached_file .

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

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

Faites-moi savoir si cela aide et je vais changer le code pour le code de travail réel.

3
Naoise Golden