自作テーマや管理画面内でもずっと添付画像をループで呼び出してサムネイル表示をしてきていたので、アイキャッチ画像というものを使ってこなかった。最近プラグインやらテーマやらでアイキャッチ画像を利用しているものにちょこちょこ出くわすのと、一枚のサムネイルのためにいちいちループで呼び出すのもいい加減面倒なのとで、いまさらながら導入していこうと思った。
そもそもアイキャッチを使ってこなかったのは、クライアントにいちいちアイキャッチ画像を設定するんですよ、というのは面倒と言うかミスの元だからだ。なので、記事を保存するときにアイキャッチ画像を設定していないときは自動的に添付画像の最初のものをアイキャッチ画像に設定するようにした関数がこちら。
アイキャッチ画像と言ってもIDがカスタムフィールドに登録されるだけなので、どんなオリジナルテーマでも邪魔にならないし、重たくもならない。なので今後のためにもfunctions.phpに入れるだけ入れて裏で走らせておこうかと思っています。
// 自動でアイキャッチ画像を設定する
function save_default_thumbnail( $post_id ) { // アイキャッチ画像を自動で設定する
if ( wp_is_post_revision( $post_id ) ) return $post_id;
$get_captype = get_post_type_object( get_post_type( $post_id ) );
if ( $get_captype && $get_captype->capability_type == 'post' && $get_captype->public == true ){
// 投稿タイプのキャパビリティがが「post」(ページは含まない)かつ、パブリック投稿タイプであること
$post_thumb = get_the_post_thumbnail( $post_id );
if ( empty($post_thumb) ) { // no featured image
$attaches = get_posts( 'post_parent='.$post_id.'&numberposts=1&post_type=attachment&post_mime_type=image&orderby=menu_order&order=ASC' );
if ( $attaches ):
update_post_meta( $post_id, '_thumbnail_id', $attaches[0]->ID );
endif;
}
}
return $post_id;
}
add_action( 'save_post', 'save_default_thumbnail' );
実際に使う際は、テーマによってカスタムフィールドに入力された画像IDを優先させたり、細かいカスタマイズを行うと良いと思います。
(2016/2.27 一部プラグインとコンフリクトしてる感じだったので、投稿タイプで判別するコードを追加しました。)