この記事は約 6 分で読めます ( 約 3547 文字 )

auto_post_thumbnail

記事の概要

この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正する方法について書きます。

「Auto Post Thumbnail」については以下の記事をお読みください。

WordPressで記事の先頭の画像を自動的にアイキャッチ画像に指定する方法
記事の概要この記事ではWordPressで記事の先頭の画像を自動的にアイキャッチ画像に指定できる「Aditya Mooley , Tarique Sani」氏の「Auto Post Thumbnail」を紹介します。「Auto Post Thumbnail」とは?記事の先頭の画像を自動的にアイキャッチ画像に指定してくれ

不具合を修正しようと思ったきっかけ

不具合を修正するにあたって以下のサイトを参考にしました。

コピペ一発でWordPressの投稿時にアイキャッチを自動設定させるカスタマイズ方法(YouTube対応版)
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;
                        }
                    }
                }
            }

修正パッチも作ってみた

自分でいうのも難ですが結構ソースコードをいじるのにかなり苦戦したので修正パッチも作ってみました。以下適用方法です。

手順1

「Auto Post Thumbnail」のプラグインのダウンロードページから「Auto Post Thumbnail」をダウンロードします。
auto_post_thumbnail_patch_001

手順2

「Auto Post Thumbnail」の修正パッチをダウンロードします。
auto_post_thumbnail_patch_002

手順3

ダウンロードした2つのファイルを解凍します。
auto_post_thumbnail_patch_003

手順4

”Auto Post Thumbnail Patch.exe”を実行します。
auto_post_thumbnail_patch_004

手順5

警告文が表示されるので確認後”閉じる”をクリックします。
auto_post_thumbnail_patch_005

手順6

更新するか否かを尋ねられるので”はい”をクリックします。
auto_post_thumbnail_patch_006

手順7

”参照”をクリックします。
auto_post_thumbnail_patch_007

手順8

”auto-post-thumbnail”フォルダを選択して”OK”をクリックします。
auto_post_thumbnail_patch_008

手順9

”OK”をクリックします。
auto_post_thumbnail_patch_009

手順10

書き換えが実行されます。その後”閉じる”をクリックします。
auto_post_thumbnail_patch_010

手順11

パッチを実行した”auto-post-thumbnail”フォルダをFTPでWordpressの”wp-content”→”plugin”フォルダにアップロードします。
auto_post_thumbnail_patch_011

注意事項および備考

まとめ

この記事では、「Auto Post Thumbnail」において記事投稿時にすでにアップロードされる画像を複製してしまう不具合を修正するパッチを公開してみました。

「Auto Post Thumbnail」で不要な画像が生成されるのが嫌な方は試してみてください。

参考になるコードを公開してくださった「わいひら」氏にこの場を借りてお礼申し上げます。