SWELLのアイキャッチ画像は、投稿やページのエディタ画面から設定できます。
アイキャッチ画像が無い場合には、カスタマイザーから設定できるno image画像が表示されるようになっています。
投稿やページのアイキャッチ画像を設定せずに、特定の条件で外部画像をアイキャッチ画像に自動設定したいと思ったので、テーマのコードを確認すると、かなり面倒なことがわかりました。
アイキャッチ画像の呼び出しをカスタマイズする時のポイント
- 記事内のアイキャッチ画像はフックで書き換えられる
- ウィジェットや関連記事のアイキャッチ画像はフックで出力を書き換えられない
- WordPressのフックを駆使して騙さないといけない
SWELLのアイキャッチ画像はフックで上書きできない
投稿やpageにアイキャッチ画像が登録されていない場合は、SWELLはアイキャッチ画像を出力しません。
アイキャッチ画像を登録しないとno image画像が表示されます。
投稿やページの先頭アイキャッチ画像はswellに用意されたフックで上書きできます。
apply_filters( 'swell_parts_post_thumbnail', $return, $post_id, $is_youtube );
しかし、ウィジェットや関連記事のサムネイル画像はこのフィルタを通過しません。
ウィジェットや関連記事のサムネイル画像は\SWELL_Theme::get_thumbnail()
関数が出力するHTMLで表示されています。
これではswell_parts_post_thumbnail
フィルタの意味がなさすぎるし、誰得なのかわからないので、SWELLのバグじゃないかと思います。
仕方ないので、SWELLでアイキャッチ画像が登録されていない投稿にアイキャッチ画像をコードで表示させようとすると、次の手順が必要です。
- アイキャッチ画像が登録されているようにhas_post_thumbnailフックで書き換える
- post_thumbnail_idフックでダミーのIDを返す
- post_thumbnail_htmlフックでアイキャッチのHTMLを書き換える
このように書くと簡単ですが、フックを特定の条件の時に多重に掛ける必要があり、プライオリティの調整も必要なので、きちんと動かすには結構気を使うコードになります。
SWELLのアイキャッチ画像に外部画像を使う場合はプラグインが便利
フックで簡単にカスタマイズできないので、仕方ありません。
アイキャッチ画像に外部画像を使いたい場合は、素直にプラグインを使うのが便利です。
Featured Image from URL (FIFU)というプラグインが便利です。

なぜ、このプラグインを選ぶかと言えば、コードからアイキャッチ画像指定できるためです。
fifu_dev_set_image($post_id, $image_url)
このプラグインで外部画像を登録すると、アイキャッチ画像がDBに登録されるので、SWELLの通常の処理でアイキャッチ画像が表示されるようになります。
単純に記事内の外部画像をアイキャッチにするのであれば、XO Featured Image Toolsというプラグインがあるのですが、このプラグインの致命的なところは、外部画像を探す時にショートコードを展開しないことです。
ショートコード経由して自動生成したような記事の場合は、上手く動かないです。
XO Featured Image Toolsはバージョンアップによって、ショートコード展開にも対応できるようになり、神プラグインになりました。

コメント