web-dev-qa-db-fra.com

Renommer les images téléchargées avec une largeur en nom de fichier

J'essaie de changer le format de nom utilisé par WordPress pour renommer les fichiers téléchargés. Par exemple, lorsque je télécharge une image portant le nom de fichier cat-picture.jpg, WordPress crée des versions à l’échelle et renomme le nom de fichier en variantes de cat-picture-{WIDTHxHEIGHT}.jpg. Existe-t-il un moyen de déplacer cet attribut width & height au début du nom de fichier afin d'obtenir des variations de {WIDTHxHEIGHT}-cat-picture.jpg? Donc, dans le contexte de cet exemple, j'aimerais que le nom de fichier soit renommé 600x400-cat-picture.jpg. Pensées?

J'ai regardé ce post et ce post , mais je suis incapable de trouver une solution qui fonctionne. Voici mon code:

add_filter( 'wp_handle_upload_prefilter', 'modify_uploaded_file_names', 20);
function modify_uploaded_file_names( $image ) {
    // Get default name of uploaded file and set to variable
    $imagename = $image['name'];
    // Case switch for multiple file extensions
    switch ( $image['type'] ) {
        case 'image/jpeg' :
            $suffix = 'jpg';
            break;
        case 'image/png' :
            $suffix = 'png';
            break;
        case 'image/gif' :
            $suffix = 'gif';
            break;
    }
    // Get size of uploaded image and assign to variable
    $imagesize = getimagesize($image);
    // Re-structure uploaded image name
    $image['name'] = "{$imagesize[0]}x{$imagesize[1]}-{$imagename}.{$suffix}";

    return $image;
}
3
kaffolder

J'ai réussi à le faire avec le filtre image_make_intermediate_size .

Tous les path/filename.extension démembrement et refonte pourraient probablement être optimisés ou réalisés en un seul geste, mais hélas, je vais laisser cela au lecteur:

// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'rename_intermediates_wpse_82193' );

function rename_intermediates_wpse_82193( $image ) 
{
    // Split the $image path into directory/extension/name
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );

    // Build our new image name
    $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    $size_extension = substr( $name, strrpos( $name, '-' ) + 1 );
    $new_name = $dir . $size_extension . '-' . $name_prefix . $ext;

    // Rename the intermediate size
    $did_it = rename( $image, $new_name );

    // Renaming successful, return new name
    if( $did_it )
        return $new_name;

    return $image;
}
3
brasofilo