1枚のheader.php
を共通利用するWordPressで、h1
タグを動的に出し分ける方法。2種類の方法がある。
ひとつは、TOPページやアーカイブページではブログ名をh1
タグで囲い、投稿ページや固定ページではページタイトルをh1
で囲うようにする方法。
ふたつめは、条件によって出力する内容を複数連ねて記述する方法。
h1タグを動的に出し分けるheader.phpの書き方
<?php $html_tag = (is_home() || is_front_page() || is_archive() || is_404()) ? 'h1' : 'div'; ?>
<<?php echo $html_tag; ?> class="blogname">
<a href="<?php echo esc_url(home_url()); ?>">
<img src="<?php echo get_template_directory_uri(); ?>/img/sitelogo.png" alt="">
</a>
</<?php echo $html_tag; ?>>
コード解説
<?php $html_tag = ( is_home() || is_front_page() || is_archive() || is_404()) ? 'h1' : 'div'; ?>
h1タグを動的に出し分けているコード。
表示しているページがホーム or フロントページ or アーカイブ or 404 ならばh1
で囲い、それ以外ならdiv
で囲うよう指示している。
ソースの確認
ブラウザでソースを表示させると、トップページではサイトロゴがh1となり、
<h1 class="blogname">
<a href="https://sample.com">
<img src="https://sample.com/wp-content/themes/my-theme/img/sitelogo.png" alt="サイト名">
</a>
</h1>
投稿ページではページタイトルがh1
となっている。
<h1>【WordPress】h1タグをページの種類によって出し分ける方法</h1>
条件によって出力する内容を複数連ねて記述する方法
if (is_front_page() && is_home()) {
// デフォルトホームページ
} elseif (is_front_page()) {
// 固定ペーシを使ったホームページ
} elseif (is_home()) {
// ブログページ
} else {
// それ以外
}
補足
サイトロゴのimg
はbase64でエンコードされていた。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAoAQAAAACTZ4ixAAAAAnRSTlMAAHaTzTgAAAASSURBVDjLY2AYBaNgFIwCCAAABBAAAYU/qnIAAAAASUVORK5CYII=" alt="サイト名" data-src="https://sample.com/wp-content/themes/my-theme/img/sitelogo.png" decoding="async" class="lazyload" width="200" height="40">
原因は、プラグインのEWWW Image Optimizer
の機能の一つで、遅延読み込み設定がONになっていることだった。
OFFにすると、

エンコードされないソースに戻った。
<h1 class="blogname">
<a href="https://sample.com">
<img src="https://sample.com/wp-content/themes/my-theme/img/sitelogo.png" alt="すなこと">
</a>
</h1>
EWWW Image Optimizer
を調べると以下の解説を見かけた。
EWWW Image Optimizerの機能では、base64エンコードされた透過画像をかませた形でクラスlazyloadをトリガーに遅延読み込み処理を実施していたようです。
https://blog.webico.work/preview-lost-image
EWWW Image Optimizerは、EXIF情報の削除のみ有効化し、他の機能は無効化した。