web-dev-qa-db-ja.com

ファイル名の「幅」と「高さ」を「中」、「大」、「小」に置き換えてアップロード画像の名前を変更する

おはようございます、

私はWordpressがアップロードされたファイルの名前を変更するのに使用する名前フォーマットを変更しようとしています。ファイル名が "desert-landscape.jpg"の画像をアップロードすると、Wordpressは拡大縮小版を設定し、ファイル名の名前を "desert-landscape- {WIDTHxHEIGHT} .jpg"(サムネールのサイズによって異なる)の組み合わせに変更します。

Filenameからwidth&height属性を削除し、それらを "{medium} -desert-landscape.jpg"、 "{large} -desert-landscape.jpg"、および "{small} -desert-landscape.jpg"に置き換える方法はありますか「?

この記事を見てきました ファイル名の幅のある画像アップロードの名前を変更します 私は正しい方法でそれを修正することができません。

ありがとうございました

// 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

正直に言うと、あなたがこれまでに試したことは、 ではない という答えをコピーして貼り付けることだけで、少し戸惑います。一方で、あなたはあなたの問題をはっきりと説明しました。あなたが本当に何が起こっているのか理解したいのであれば、以下に私はあなたのための解決策を概説します、追加のコメントと情報源を見てください。

コード:

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

情報源:

注: 未テスト

3
Nicolai