サポート » 使い方全般 » インポート後、サムネイルサイズが1pxずれる場合がある

  • 旧ブログのデータを新ブログにインポートした際、一部の画像が404になりました。
    ソースを見ると、ファイル名が3340920o-「330×247」.jpgなのですが、
    サーバには、3340920o-「330×248」.jpgのサムネイルが生成されていました。

    インポートした際、メディアのサムネイル生成において、heightが1pxずれたと思っていますが、こちら、解決する方法はありましたらご教示ください。

    また記事内で、

    wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'thumbnail');

    と、画像を取得する際も、旧ブログの画像ファイル名、「3340920o-330×247.jpg」のコードが生成されてしまいます。
    これはメディアのデータに、旧ブログのサムネイルサイズが記憶されている?のでしょうか。

    以上、よろしくお願いいたします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • 旧ブログの画像データは WordPress のバージョン 4.1 より古いときにアップロードしたものでしょうか? WordPress 4.1 がリリースされたときに下記のバグが修正されたそうです。
    #18532 (resized image dimensions incorrectly floored instead of rounded) – WordPress Trac
    (サイズの端数を切り捨てていたのを、四捨五入に変更。)

    対処方法は思いつきませんが。

    gbism 様

    返信、本当にありがとうございます。
    こういう経緯があったのですね。
    おっしゃるとおり、2015年9月あたりのファイルでした。

    インポート後のサムネイルのサイズは仕方ないにしろ、
    テーマから呼び出した時のファイル名が、旧ブログのファイルサイズになるのはどうしてでしょうか。

    wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'thumbnail');

    これなら、現プログでインポートした後のサムネイルサイズが呼び出されそうですが。。。

    管理画面から画像ファイル(メディア)をアップロードすると、それと一対一で投稿タイプが attachment の投稿データが作られます。この投稿データにカスタムフィールド(メタデータ)がつき、そこへ画像ファイルのファイル名が入ります。縮小したサムネイルなどのファイル名も同様にメタデータとして入っているので、旧ブログから旧ファイル名(メタデータ)がそのまま新ブログへ移ったはずです。
    wp_get_attachment_image_src は、サムネイルのファイル名をこのメタデータから取得するので、旧ファイル名が出てきます。(サムネイルのファイルが実在するかチェックしません。)

    こういう訳ですので対策は、このメタデータの中身を今のファイル名で上書きしてあげるのが良さそうです。うろ覚えなんですが、サムネイルを再生成するプラグインがあったような。

    検証していませんがこのプラグインはどうでしょう。
    ダメなとき戻せるようにデータベースとファイル全部のバックアップをとってから試してみては。
    Regenerate Thumbnails

    投稿本文に書き込まれている旧ファイル名は、文字列を置き換えるプラグインで対処するのが良さそうです。

    gbism様

    アドバイス、ありがとうございます。
    やはりメタデータに格納されているのですね。

    全記事をインポートした際は、メディアのメタデータもインポートされるとありましたので、サムネイルを再生成してくれるなら、それに合わせてメタデータ(ファイル名)も変更されるかと思っておりました。

    こういう訳ですので対策は、このメタデータの中身を今のファイル名で上書きしてあげるのが良さそうです。うろ覚えなんですが、サムネイルを再生成するプラグインがあったような。

    おっしゃるとおりなのですが、ファイル名が300×248 など、末尾が画像サイズによってまちまちになります。
    リンク切れが50を超えているので、なかなか手動では・・・という状況です。

    ダメなとき戻せるようにデータベースとファイル全部のバックアップをとってから試してみては。
    Regenerate Thumbnails

    こちらも試してみました。
    サムネイルを再生成してくれるだけで、メタデータは変わりませんでした。
    アドバイスありがとうございます。

    サムネイルのファイル名は、「画像名-large.jpg」などであれば便利だなと思いました。
    以上、ありがとうございました。

    こんにちは、フィルタで処理できませんか?

    add_filter( 'wp_get_attachment_image_src', 'my_image', 10, 4 );
    function my_image( $image, $attachment_id, $size, $icon ){
    
    	// $image[0] を str_replace等で、パスに変換
    	// file_existsで、ファイルの存在を確認
    	//無かったら、サイズ部分を切る
    
    	//サイズ部分を切る例
    	$tmp_image = 'http://www.example.com/wp/wp-content/uploads/cropped-IMG000591-150x150.jpg';
    	$tmp_image = preg_replace('!-[0-9]{3}x[0-9]{3}!','', $tmp_image);
    	//$tmp_image を returnしてやる
    
    	return $image;
    }

    nobita様

    こんにちは。
    なるほど、サムネイルがなかったら原盤を表示すると考え方ですね。
    素晴らしい・・・

    どう実装すればよいかまだ想像できませんが、
    一度チャレンジしてみます。

    もう少し他の意見を頂戴したいので、スレッドは公開のままにします。
    ありがとうございました。

    example

    動くかどうか??? ですが

    functions.php

    add_filter( 'wp_get_attachment_image_src', 'my_image', 10, 4 );
    
    function my_image( $image, $attachment_id, $size, $icon ) {
    
    	$path_uploads	 = wp_upload_dir();
    	$path_uploads	 = $path_uploads[ 'path' ];
    
    	$tmp_image = str_replace( content_url( '/uploads' ), $path_uploads, $image[ 0 ] );
    
    	if ( !file_exists( $tmp_image ) ) {
    
    		$tmp_image	 = preg_replace( '!-[0-9]{3}x[0-9]{3}!', '', $image[ 0 ] );
    		$image[ 0 ]	 = esc_url( $tmp_image );
    		return $image;
    	}
    
    	return $image;
    }

    nobita様

    参考になるコード、ありがとうございます。
    まだ試しておりませんが、まずは御礼申し上げますm(_ _)m
    参考にしながら、検証してみます。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「インポート後、サムネイルサイズが1pxずれる場合がある」には新たに返信することはできません。