Alt属性値を画像ホバー時にキャプションとして表示させるWordPressカスタマイズ方法

僕は記事に画像を挿入する際は毎回「代替テキスト(Alt属性値)」を入力しています。

これは、画像の説明となる「代替テキスト」を入力し、画像内容を検索エンジンに正確に伝えることによって、多少なりともSEO的な効果があるのではないかと思ってのことです。実際どのくらい効果があるのかは、わからないのですけど。

それはさておき僕は、毎回Alt属性値を入力するたびに常々こう思っていました。「(ほぼ)検索エンジンに向けてAltを入力するのはもったいないなぁ。何か入力したテキストを有効利用できないもんか。」と。

で、先日ネットで紹介されていたエフェクトを見たときに、「これだ!」と思い、「Altを利用しキャプションを表示するホバーエフェクトの実装方法」を思いついたので紹介です。

スポンサーリンク
レクタングル(大)広告

今回のカスタマイズをすると

今回紹介するカスタマイズを行うと、Wordpress記事作成時にAlt属性とともに画像を挿入すると、Alt属性値がキャプションとなって以下のように表示されます。

入力したAlt属性値が画像のキャプションとなって、アニメーションとともに表示されます。
入力したAlt属性値が画像のキャプションとなって、アニメーションとともに表示されます。

PCで画像の上にマウスを乗せてみてください。

WordPressテーマのカスタマイズ方法

カスタマイズに必要な主な手順は以下です。

  1. エフェクト用のスタイルシートを書く(コピペ)
  2. imgをエフェクト用ラッパーで囲む処理を書く(コピペ)

単に、Wordpressテーマ(子テーマ)に2回コピペするだけなので、かなり簡単にできるカスタマイズになっていると思います。

エフェクト用のスタイルシートを書く

まずは、マウスホバー時にキャプションをアニメーション表示するスタイルシートを記入します。

テーマ(子テーマ)のstyle.cssに以下のように追記してください。

.hover-image {
  display: inline-block;
  margin: 10px;
  text-align: left;
  opacity: .99;
  overflow: hidden;
  position: relative;
  border-radius: 3px;
  box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.05);
}
.hover-image:before {
  content: '';
  background: -webkit-linear-gradient(top, transparent 0%, rgba(0, 0, 0, 0.7) 100%);
  background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.7) 100%);
  width: 100%;
  height: 50%;
  opacity: 0;
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 2;
  -webkit-transition-property: top, opacity;
          transition-property: top, opacity;
  -webkit-transition-duration: 0.3s;
          transition-duration: 0.3s;
}
.hover-image img {
  display: block;
  max-width: 100%;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.hover-image .details {
  font-size: 16px;
  padding: 20px;
  color: #fff;
  position: absolute;
  bottom: 0;
  left: 0;
  z-index: 3;
}
.hover-image .details span {
  display: block;
  opacity: 0;
  position: relative;
  top: 100px;
  -webkit-transition-property: top, opacity;
          transition-property: top, opacity;
  -webkit-transition-duration: 0.3s;
          transition-duration: 0.3s;
  -webkit-transition-delay: 0s;
          transition-delay: 0s;
}
/*今回は使用しない
.hover-image .details .title {
  line-height: 1;
  font-weight: 600;
  font-size: 18px;
}*/
.hover-image .details .info {
  line-height: 1.2;
  margin-top: 5px;
  font-size: 12px;
}
.hover-image:hover:before,
.hover-image:hover span {
  opacity: 1;
}
.hover-image:hover:before {
  top: 50%;
}
.hover-image:hover span {
  top: 0;
}
/* 今回は使用しない
.hover-image:hover .title {
  -webkit-transition-delay: 0.15s;
          transition-delay: 0.15s;
}*/
.hover-image:hover .info {
  -webkit-transition-delay: 0.25s;
          transition-delay: 0.25s;
}

エフェクトのスタイルシートは、以下のコードを参考にさせていただきました。

参考 Simple Tile Hover Effect

上記の方法では、キャプションとなるテキストをspanタグを用いて、手入力する必要がありました。けれど、今回はPHPを利用して、「本文内にimgがあったら自動でタグを挿入する」ようにしたいと思います。

PHP側で、このように自動処理させることで、これまで書いてきた過去記事のIMGタグは変更する必要がなく、Alt属性値を勝手に利用し表示してくれます。

imgをエフェクト用ラッパーで囲む処理を書く

で、上記のスタイルを適用させるには、functions.phpに「本文中にimgが出てきたら、適切にエフェクト用のラッパーでくるむ処理」を書く必要があります。

その処理が以下。こちらを、functions.phpにコピペで追記します。

//画像が出てきたらキャプション表示用のラッパーを装着
function wrap_hover_image($the_content) {
  if ( is_singular() ) {
    //Alt属性値のある画像タグをラッパー付きのタグで置換する
    $the_content = preg_replace(
      '/(<img.+?alt=[\'"]([^\'"]+?)[\'"].+?>)/i',
      '<div class="hover-image">${0}<div class="details"><span class="info">${2}</span></div></div>',
      $the_content);
  }
  return $the_content;
}
add_filter('the_content','wrap_hover_image');

    これは、本文を表示する前に、「通常の画像タグ」を、「エフェクト用のタグ」でくるむよう正規表現を使って置換処理をしています。

    利用方法

    あとは、記事編集で画像を挿入するとき「代替テキスト(Alt属性値)」を入力して投稿に挿入すればOKです。

    ソースはこんな感じです。

    <img alt="記事編集時に「代替テキスト(Alt属性値)」を入力して投稿に挿入する" src="https://nelog.jp/wp-content/uploads/2015/06/Alt1.jpg" />

    記事編集時に「代替テキスト(Alt属性値)」を入力して投稿に挿入する
    記事編集時に「代替テキスト(Alt属性値)」を入力して投稿に挿入する

    画像へのリンクが入っていても大丈夫です。

    <a href="#"><img alt="画像へのリンクが入っていてもホバーエフェクト用のラッパーは装着されます" src="https://nelog.jp/wp-content/uploads/2015/06/thumb6.jpg" /></a>

    ただし、Alt属性値が設定されていないとホバーエフェクトは表示されません。

    <img src="https://nelog.jp/wp-content/uploads/2015/06/428ea6f60b4a63342f62e6baae25b414.jpg" />

    なので、「代替テキスト(Alt属性値)」を設定していない、アイキャッチ画像などは、通常通りエフェクトなしで表示させることもできます。

    まとめ

    今回、SEO以外でもAlt属性値を有効活用すべく、Wordpressテーマのカスタマイズ方法考えてみました。

    Alt属性値は、1度入力してしまうと、確認が面倒くさいため誤字脱字に気づきにくいのです。けれど、今回のようなエフェクトで手軽に表示できるようにすると、入力内容の確認が容易にもなるかと思います。

    もちろん、今回のカスタマイズをしてもスマホでは表示されません。

    けれど、PCで見ている人が「このサイトは画像1つ1つに説明が入っているなんて手間がかかっているなぁ。これだけちゃんと作ってあるとこの情報なら信頼できるかも。」なんてことを少しでも思ってくれたら、めっけもんだと思います。