functions.php に以下を記述して、アイキャッチ画像の機能を有効にすると、編集画面で「アイキャッチ画像」という設定項目が追加される。
add_theme_support('post-thumbnails');
アイキャッチ画像の幅と高さ(基本サイズの指定)を指定するには set_post_thumbnail_size() を使用する。
但し、set_post_thumbnail_size() のパラメータを変更しても、アップロード済みのアイキャッチ画像には適用されないので、画像をアップロードする前に指定しておく必要がある。利用する画像が、アイキャッチ画像を設定する前にアップロードしてある場合、アップロード済みの画像を生成し直すプラグイン「Regenerate Thumbnail」を利用すると便利。
基本サイズ以外のサイズは add_image_size() 関数で指定する。
基本サイズは「設定」→「メディア」ページで設定したサイズ(thumbnail,medium, large)、元のサイズ(full)、「set_post_thumbnail_size()」で指定したサイズ。
アイキャッチ画像の設定例
//functions.php add_theme_support('post-thumbnails'); // アイキャッチ画像の機能を有効に set_post_thumbnail_size(640, 640); //基本サイズの指定(長辺の長さを揃えて生成) add_image_size('msize', 400, 400); //msizeサイズの指定 add_image_size('ssize', 120, 120, true); //ssizeサイズの指定。trueを指定するとトリミング機能を有効にする
//サムネイルのサイズで出力する <?php the_post_thumbnail('thumbnail'); ?> //縦と横のサイズを指定して出力 <?php the_post_thumbnail(array(150, 100)); ?>
文字列/配列のどちらを渡す場合も、画像が大きければ指定サイズまで縮小されるが、画像が小さい場合は拡大されない。
アイキャッチ画像がない場合も想定しなければならない場合は、以下のようデフォルトの画像が挿入されるようにする方法もある。
<?php if(has_post_thumbnail()): ?> //アイキャッチ画像がある場合 <p><?php the_post_thumbnail(); ?></p> //アイキャッチ画像を表示 <?php else: ?> //アイキャッチ画像がない場合は、デフォルトの画像を表示 <p><img src="<?php echo get_template_directory_uri(); ?>/images/no_image.gif" alt="風景" title="" width="110" height="110" /></p> <?php endif; ?>
文字列 | サイズ |
---|---|
thumbnail | 「設定」→「メディア」ページの「サムネイルのサイズ」で指定したサイズ |
medium | 「設定」→「メディア」ページの「中サイズ」で指定したサイズ |
large | 「設定」→「メディア」ページの「大サイズ」で指定したサイズ |
full | 元のサイズ |
指定なし | 指定しなければ、set_post_thumbnail_size()で設定した基本サイズで出力される |
キーワード | add_image_size()で設定したサイズ |
post-thumbnail | 指定なしと同様、set_post_thumbnail_size()で設定した基本サイズで出力される |
thumb | 確証はないが、おそらく、「設定」→「メディア」ページの「サムネイルのサイズ」で指定したサイズのトリミングなしのサイズ? |
// ループ内での呼び出しの例('m_size' でアイキャッチ画像を出力) <?php echo get_the_post_thumbnail($post->ID, 'm_size'); ?>
以下の例では、「while」と「endwhile」の間に改行を入れないようにしている。
<?php if(have_posts()): while(have_posts()): the_post(); ?><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('ssize'); ?></a><?php endwhile; endif; ?>
実際は、<?php if(have_posts()): while(have_posts()): the_post(); ?> と <a> の間の改行は出力されない。但し、ここに2つ以上の改行を入れると出力されるので注意が必要。
WordPress で自動生成される画像のファイル名には法則がある。たとえば、「picture.jpg」という画像をアップロードすると、
そのため、出力ソースに含まれる「150」を「45」に置換すると、45×45ピクセルの画像を表示することができる。
<?php echo str_replace("150", "45", get_the_post_thumbnail()); ?>
アップロード済みの画像を生成し直すプラグイン
投稿のIDでアイキャッチ画像を指定するには「get_the_post_thumbnail」を使用する。
ヘッダー画像を表示する部分 に以下の記述を追加して、アイキャッチ画像を表示する。
<?php if(has_post_thumbnail($post->ID)): ?> //アイキャッチ画像がある場合 <p><?php echo get_the_post_thumbnail($post->ID); ?></p> //アイキャッチ画像を表示 <?php else: ?> //アイキャッチ画像がない場合は、標準のヘッダー画像を表示 <p><img src="<?php header_image(); ?>" alt="" title="" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" /></p> <?php endif; ?>
get_the_post_thumbnail() はアイキャッチ画像の img 要素の HTML を出力するので、 img 要素の属性を追加したり、変更することはできない。(クリッカブル・マップの usemap 属性の指定など)
アイキャッチ画像のURL(src)を取得するには、get_post_thumbnail_id() で ID を取得し、それを wp_get_attachment_image_src() に渡して、画像の情報を取得する。
<?php if(has_post_thumbnail()): ?> <?php $thumbnail_id = get_post_thumbnail_id($post->ID); $src_info = wp_get_attachment_image_src($thumbnail_id, 'full'); $src = $src_info[0]; $width = $src_info[1]; $height = $src_info[2]; ?> <p id="contactphoto"><img src="<?php echo $src; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" usemap="#Map" alt="" /> <map id="Map" name="Map"> <area alt="contact" href="" coords="114,84,494,140" shape="rect" title="<?php _e('Contact via Email', 'mydomain'); ?>"> </map> </p> <?php endif; ?>
デフォルト値では圧縮率が90%になっているので、100%に変更するには、以下を functions.php に記述する。
function jpeg_quality_callback($arg) { return (int)100; } add_filter('jpeg_quality', 'jpeg_quality_callback');