先日、WordPressのアイキャッチ画像を記事の一覧に入れる対応を行いました。アイキャッチ画像のタイトルも添えられる様にしたのですが、アイキャッチ画像のタイトルが画像幅よりも長いと、外枠の幅が広がってしまう現象が発生しました。

幅が広がる事象

幅が広がる事象は次の通りです。赤丸で囲ったとおり、画像の左右余白が不均等となり、右側が広がってしまったことが分かります。

WordPress余白可変
WordPress余白可変

この時、WordPress上では次の通り実装していました。ポイントは「the_post_thumbnail」の部分。この1行でアイキャッチ画像をページに表示していました。

<?php if ( has_post_thumbnail() ) { ?>
    <div style="float: left; margin-right: 10px;
                margin-top: 10px; padding:7px;
                background-color:whitesmoke;" >
    <?php the_post_thumbnail('thumbnail'); ?><br />
        <div style="font-size:12px; text-align:center;
                   color:dimgray;">
            <?php echo get_post( get_post_thumbnail_id()
                       )->post_excerpt; ?>
        </div>
    </div>
<?php } ?>

取得方法と表示方法を見直し

それまで<div>のデザインで単にthe_post_thumbnailを呼び出していた簡単な実装でした。divの枠が広がってしまうのはdivの幅が指定されていないからで、その幅は表示画像の幅が適切であることから、次の様に書き換えました。

<?php
  if ( has_post_thumbnail() ) {
      $thumbnail_id = get_post_thumbnail_id($post->ID);
      $image = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail' );
      $src = $image[0];
      $width = $image[1];
      $height = $image[2];
?>
    <div style="float: left; margin-right: 10px;
                margin-top: 10px; padding:7px;
                background-color:whitesmoke;
                width:<?php echo $width; ?>px;">
        <?php echo '<img src="'.$src.'" width="'.$width.'"
                   height="'.$height.'" />'; ?><br />
            <div style="font-size:12px; text-align:center;
                       color:dimgray;">
                <?php echo get_post( get_post_thumbnail_id()
                      )->post_excerpt; ?>
            </div>
    </div>
<?php } ?>

ポイントは、アイキャッチ画像を直接表示する「the_post_thumbnail」をやめ、「wp_get_attachment_image_src」とする実装に変更したところです。アイキャッチ画像をいったん変数に受け取ることで、画像URLや幅、高さを取得できる様になりました。これで画像を囲うDIV部分にも画像幅でwidth指定をすることができる様になりました。

WordPress余白固定
WordPress余白固定

これで無駄な余白を取り除くことができました。今回参考にさせてもらったサイトはこちらです。

アイキャッチ画像の「URL,横幅,高さ」を取得する[Wordpress]
参考にしたKOTORIブログさんのページです。

たいへん助かりました!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です