記事の概要
この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正する方法について書きます。
「Auto Post Thumbnail」については以下の記事をお読みください。
WordPressで記事の先頭の画像を自動的にアイキャッチ画像に指定する方法
不具合を修正しようと思ったきっかけ
不具合を修正するにあたって以下のサイトを参考にしました。
コピペ一発でWordPressの投稿時にアイキャッチを自動設定させるカスタマイズ方法(YouTube対応版)
上記の記事にあるスクリプトを導入すれば新着記事のアイキャッチの設定は楽になるのですが、過去記事には対応していないようでした。
やはり過去記事に適用するには「Auto Post Thumbnail」に頼らざるを得ないと考え、上記記事を参考に自分なりに修正方法を考えてみました。
不具合を修正する方法
「Auto Post Thumbnail」の”auto-post-thumbnail.php”を以下のように修正します
修正前
// If thumb id is not found, try to look for the image in DB. Thanks to "Erwin Vrolijk" for providing this code. if (!$thumb_id) { $image = substr($image, strpos($image, '"')+1); $result = $wpdb->get_results("SELECT ID FROM {$wpdb->posts} WHERE guid = '".$image."'"); if($result){ $thumb_id = $result[0]->ID; } }
修正後
// If thumb id is not found, try to look for the image in DB. Thanks to "Erwin Vrolijk" for providing this code. if (!$thumb_id && ( strpos($image, site_url()) !== false )) { //$image = substr($image, strpos($image, '"')+1); preg_match('/src *= *"([^"]+)/i', $image, $m); $image = $m[1]; if ( isset($m[1]) ) { //wp_postsテーブルからguidがファイルパスのものを検索してIDを取得 $result = $wpdb->get_results("SELECT ID FROM {$wpdb->posts} WHERE guid = '".$image."'"); //IDをサムネイルをIDにセットする if ( isset($result[0]) ){ $thumb_id = $result[0]->ID; } } //サムネイルなどで存在しないときはフルサイズのものをセットする if ( !$thumb_id ) { //ファイルパスの分割 $path_parts = pathinfo($image); //サムネイルの追加文字列(-680x400など)を取得 preg_match('/-\d+x\d+$/i', $path_parts["filename"], $m); //画像のアドレスにサイト名が入っていてサムネイル文字列が入っているとき if ( isset($m[0]) ) { //サムネイルの追加文字列(-680x400など)をファイル名から削除 $new_filename = str_replace($m[0], '', $path_parts["filename"]); //新しいファイル名を利用してファイルパスを結語 $new_filepath = $path_parts["dirname"].'/'.$new_filename.'.'.$path_parts["extension"]; //wp_postsテーブルからguidがファイルパスのものを検索してIDを取得 $result = $wpdb->get_results("SELECT ID FROM {$wpdb->posts} WHERE guid = '".$new_filepath."'"); //IDをサムネイルをIDにセットする if ( isset($result[0]) ){ $thumb_id = $result[0]->ID; } } } }
修正パッチも作ってみた
自分でいうのも難ですが結構ソースコードをいじるのにかなり苦戦したので修正パッチも作ってみました。以下適用方法です。
手順1

手順2

手順3

手順4

手順5

手順6

手順7

手順8

手順9

手順10

手順11

注意事項および備考
- 私は書き換えたソースコードの内容をほとんど理解していないので原則的にノーサポートでお願いします。
- フルサイズで試したところ、外部リンクの画像以外は新たな画像の生成が行われなかったことを確認しました。
- このパッチは「udm差分ファイル作成ツール – Free Edition」を使用して作成しています。
- 新着記事に適用する場合は上記で参考にしたの「わいひら」氏のコードを使ったほうが何かと便利です。
まとめ
この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正するパッチを公開してみました。
「Auto Post Thumbnail」で不要な画像が生成されるのが嫌な方は試してみてください。
参考になるコードを公開してくださった「わいひら」氏にこの場を借りてお礼申し上げます。