Categories: WordPress

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だと自動アイキャッチ投稿が出来ない
WordPress 4.6.4の環境でアイキャチ投稿が出来なくなった 今日アップデート通知があったのでアップデ…
milkveil.com
Find the best information and most relevant links on all topics related to

 

対策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 でも問題なくサムネイル画像に設定できるはずです。

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

Auto Post Thumbnail でサムネイルが生成されないバグを発見したので対処した
このブログではサムネイルの生成に Auto Post Thumbnail プラグインを用いて記事内の先頭にある画像を自動的に設定するようにしている。のだが、記事一覧を見ていると一部サムネイルが生成されていない記事を発見した。調べてみると W

以下を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  のコードを書き換えて改修する。(今後プラグインがアップグレードされると消えてしまう)

 

nakaike