Auto Post Thumbnail でjpeg画像が対応しない

どうも、Auto Post Thumbnail が機能しない。

あれこれ試していた結果、どうもJPEGを認知しないらしい。
この問題はすでに気がついている方がたくさんいて、主に2つ解決策があります。

対策1 古いバージョンに戻す

2017/11現在、最新バージョンは3.4.1ですが、その一つ前3.3.3では、JPEG問題は発生しません。そこで、3.3.3にもどして使う、という解決策。

古いバージョンは、https://ja.wordpress.org/plugins/auto-post-thumbnail/advanced/ にあって、「以前のバージョン」のところからダウンロードできます。ダウンロードしたファイルを、「プラグイン」→「新規追加」→[プラグインのアップロード] で追加します。

Auto Post Thumbnail バージョン 3.4.1だと自動アイキャッチ投稿が出来ない

WPプラグイン Auto Post Thumbnail が機能しなくなったぞい!

 

対策2 function.php にコードを追記する

で、なにが問題なのか調べてみると、

最新の3.4.1では、auto-post-thumbnail.php に、次のような箇所が追加されています。

//Fix for checking file extensions
$exts = explode(".",$filename);
if(count($exts)>2)return null;
$allowed=get_allowed_mime_types();
$ext=pathinfo($new_file,PATHINFO_EXTENSION);
if(!array_key_exists($ext,$allowed))return null;

どうやら、拡張子を使って、WordPressで対応している画像かどうかをチェックしているようです。対応していない画像を投稿すると問題が起きるのでしょう。(試してないのでわかりませんが)

記述されている、get_allowed_mime_types() ですが、この関数で取得できるのは、利用できる画像タイプの配列なのです。print_r(get_allowed_mime_types()); などとして配列の中身をみてみると、 JPEGに関しては、[jpg|jpeg|jpe] => image/jpeg  となってます。

Auto Post Thumbnail の3.4.1では、jpg|jpeg|jpe と、拡張子である jpeg などが一致しているかどうかをarray_key_exists を使って調べていますが、jpg と jpg|jpeg|jpe では文字として完全一致しないので、ここで return null となって、止まってしまいます。

一方で、JPEG以外の、たとえばPNGとかGIFとかなら、array_key_exists で取得した配列が、[gif] => image/gif  、[png] => image/png なので、Auto Post Thumbnail 3.4.1 でも問題なくサムネイル画像に設定できるはずです。

この問題について、こちらで解決策が紹介されています。

https://loumo.jp/wp/archive/20170703060006/

以下をfunction.phpに追記します。

function split_combined_mimes_for_apt( $mime_types ) {
    foreach ( $mime_types as $regex => $mime_type ) {
        if ( false !== strpos( $regex, '|' ) ) {
            $keys = explode( '|', $regex );
            foreach ( $keys as $key ) {
                $mime_types[ $key ] = $mime_type;
            }
        }
    }
    return $mime_types;
}
add_filter( 'mime_types', 'split_combined_mimes_for_apt' );

get_allowed_mime_types関数に、フィルターフックを使って、[jpg] => image/jpeg 、[jpeg] => image/jpeg 、[jpe] => image/jpeg の3つを追加するようにしています。これで、Auto Post Thumbnail でも、jpegに対応できるようにしています。

対策3 Auto Post Thumbnail を改修する

もしくは、Auto Post Thumbnail3.4.1 を直接書き換えます。

    //Fix for checking file extensions
    $exts = explode(".",$filename);
    if(count($exts)>2)return null;
    $allowed=get_allowed_mime_types();
    $ext=pathinfo($new_file,PATHINFO_EXTENSION);
    //if(!array_key_exists($ext,$allowed))return null;
    if ( !preg_grep("?".$ext."?",array_keys($allowed)) ) return null;

if(!array_key_exists($ext,$allowed))return null; を消して(コメントアウト)、if ( !preg_grep("?".$ext."?",array_keys($allowed)) ) return null; を追加します。

これで、JPEGにも対応出来るはずです。

まとめ

  1. 古いバージョン3.3.3に戻す(ただし、対応しない画像タイプで問題が起きる可能性あり)
  2. フックで対応。function.phpにコードを追記する。(get_allowed_mime_types を使っている他のプラグイン等に影響を与えるかも?)
  3. Auto Post Thubmnail 3.4.1  のコードを書き換えて改修する。(今後プラグインがアップグレードされると消えてしまう)

 

0
  • このエントリーをはてなブックマークに追加