
記事の概要
この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正する方法について書きます。
「Auto Post Thumbnail」については以下の記事をお読みください。
記事の概要この記事ではWordPressで記事の先頭の画像を自動的にアイキャッチ画像に指定できる「AdityaMooley,TariqueSani」氏の「AutoPostThumbnail」を紹介します。「AutoPostThumbnail」とは?記事の先頭の画像を自動的にアイキャッチ画像に指定してくれるプラグインです。「AutoPostThumbnail」の導入方法手順1WordPressの管理画面にログインします。手順2管理画面の左メニューの”プラグイン”をクリックします。手順3”プラグイン
不具合を修正しようと思ったきっかけ
不具合を修正するにあたって以下のサイトを参考にしました。
WordPressのテーマに、Auto Post Thumbnailプラグインのようなアイキャッチ自動設定機能を付け加えるカスタマイズ方法の紹介です。投稿本文に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;
}
}
}
}
修正パッチも作ってみた
自分でいうのも難ですが結構ソースコードをいじるのにかなり苦戦したので修正パッチも作ってみました。以下適用方法です。
ダウンロードした2つのファイルを解凍します。
”Auto Post Thumbnail Patch.exe”を実行します。
警告文が表示されるので確認後”閉じる”をクリックします。
更新するか否かを尋ねられるので”はい”をクリックします。
”参照”をクリックします。
”auto-post-thumbnail”フォルダを選択して”OK”をクリックします。
”OK”をクリックします。
書き換えが実行されます。その後”閉じる”をクリックします。
パッチを実行した”auto-post-thumbnail”フォルダをFTPでWordpressの”wp-content”→”plugin”フォルダにアップロードします。
注意事項および備考
- 私は書き換えたソースコードの内容をほとんど理解していないので原則的にノーサポートでお願いします。
- フルサイズで試したところ、外部リンクの画像以外は新たな画像の生成が行われなかったことを確認しました。
- このパッチは「udm差分ファイル作成ツール - Free Edition」を使用して作成しています。
- 新着記事に適用する場合は上記で参考にしたの「わいひら」氏のコードを使ったほうが何かと便利です。
まとめ
この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正するパッチを公開してみました。
「Auto Post Thumbnail」で不要な画像が生成されるのが嫌な方は試してみてください。
参考になるコードを公開してくださった「わいひら」氏にこの場を借りてお礼申し上げます。