投稿の最初の画像をアイキャッチ画像として使う方法(その2)
2020年3月4日
functions.phpに以下のコードを追加。
wordpressで画像表示時に付与されるwp-image-932のようなIDは必須なので、余計なタグを排除するようなフックを導入していると使えないので注意。
/*↓アイキャッチ画像登録用*/
add_theme_support('post-thumbnails');
// 投稿内の画像をアイキャッチ画像にする
add_image_size('rect', 300, 300, true);//画像サイズ
//画像URLからIDを取得
function get_attachment_id_by_url( $url ) {
global $wpdb;
$sql = "SELECT ID FROM {$wpdb->posts} WHERE post_name = %s";
preg_match( '/([^\/]+?)(-e\d+)?(-\d+x\d+)?(\.\w+)?$/', $url, $matches );
$post_name = $matches[1];
return ( int )$wpdb->get_var( $wpdb->prepare( $sql, $post_name ) );
}
//画像をサムネイルで出力
function catch_that_image() {
global $post;
$first_img = '';
$output = preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches );
$first_img_src = $matches[1][0];
$attachment_id = get_attachment_id_by_url( $first_img_src );
$first_img = wp_get_attachment_image( $attachment_id, 'rect', false, array( 'class' => 'archive-thumbnail' ) );
if( empty( $first_img ) ){
$first_img = '<img class="attachment_post_thumbnail" src="' . get_stylesheet_directory_uri() . '/assets/img/common/no-img.jpg" alt="No image" />';
}
return $first_img;
}