どうも、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/ にあって、「以前のバージョン」のところからダウンロードできます。ダウンロードしたファイルを、「プラグイン」→「新規追加」→[プラグインのアップロード] で追加します。
対策2 function.php にコードを追記する
で、なにが問題なのか調べてみると、
最新の3.4.1では、auto-post-thumbnail.php に、次のような箇所が追加されています。
1 2 3 4 5 6 |
//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 でも問題なくサムネイル画像に設定できるはずです。
この問題について、こちらで解決策が紹介されています。
以下をfunction.phpに追記します。
1 2 3 4 5 6 7 8 9 10 11 12 |
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 を直接書き換えます。
1 2 3 4 5 6 7 |
//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にも対応出来るはずです。
まとめ
- 古いバージョン3.3.3に戻す(ただし、対応しない画像タイプで問題が起きる可能性あり)
- フックで対応。function.phpにコードを追記する。(get_allowed_mime_types を使っている他のプラグイン等に影響を与えるかも?)
- Auto Post Thubmnail 3.4.1 のコードを書き換えて改修する。(今後プラグインがアップグレードされると消えてしまう)