web-dev-qa-db-fra.com

Renomme les images téléchargées en remplaçant "largeur" et "hauteur" dans le nom du fichier par "moyen", "grand", "petit".

Bonjour,

J'essaie de changer le format du nom utilisé par Wordpress pour renommer les fichiers téléchargés. Lorsque je télécharge une image dont le nom de fichier est "desert-landscape.jpg", Wordpress configure des versions à l’échelle et renomme les noms de fichiers en différentes combinaisons de "desert-landscape- {WIDTHxHEIGHT} .jpg" (en fonction de la taille des vignettes).

Existe-t-il un moyen de supprimer les attributs width et height du nom de fichier et de les remplacer par "{medium} -desert-landscape.jpg", "{large} -desert-landscape.jpg" et "{small} -desert-landscape.jpg "?

J'ai regardé ce post Renommer les images téléchargées avec une largeur dans le nom de fichier je ne parviens pas à le réparer correctement.

Je vous remercie

// 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;
}
2
morelo

Pour être honnête, je suis un peu perplexe de constater que tout ce que vous avez essayé jusqu’à présent consiste à copier et coller une réponse qui ne signifie pas ne résout pas votre problème. D'autre part, vous avez clairement décrit votre problème. Ci-dessous, je vous présente une solution, jetez un coup d’œil aux commentaires et sources d’informations supplémentaires, si vous voulez vraiment comprendre ce qui se passe.

Code:

// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'wpse_123240_rename_intermediates' );
function wpse_123240_rename_intermediates( $image ) {
    // Split the $image path into directory/extension/name
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );

    // Get image information 
    // Image edtor is used for this
    $img = wp_get_image_editor( $image );
    // Get image size, width and height
    $img_size = $img->get_size();

    // Image prefix for builtin sizes
    // Note: beware possible conflict with custom images sizes with the same width
    $widths = [];
    $size_based_img_name_prefix = '';
    foreach ( get_intermediate_image_sizes() as $_size ) {
        if ( in_array( $_size, [ 'thumbnail', 'medium', 'medium_large', 'large' ] ) ) {
            $width = get_option( "{$_size}_size_w" );
            if ( ! isset( $widths[ $width ] ) ) {
                $widths[ $width ]  = $_size;
            }
        }
    }
    if ( array_key_exists( $img_size[ 'width' ], $widths ) ) {
        $size_based_img_name_prefix = $widths[ $img_size['width'] ] . '-';
        $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    } else {
        $name_prefix = $name;
    }

    // Build our new image name
    $new_name = $dir . $size_based_img_name_prefix . $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;
}

Sources d'information:

Notes: non testé

3
Nicolai