旧ブログの画像データは 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
参考にしながら、検証してみます。