Amazonで商品を見る セール会場へ

WordPress│記事の終わりにバナーを表示するカスタマイズ

記事末尾に置いた目印が画面に入ったら、関連情報への小さな固定パネルを出す例です。ページ全体の高さの80%を記事末尾と見なす処理をやめ、IntersectionObserverで設置した目印を監視します。広告の最適化を行う例ではありません。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

HTMLを記事の末尾へ置く

対象記事のカスタムHTMLブロックに次の1組を置きます。URLとリンク文言を実際の案内に変更してください。このページでは後述の「動く見本」に目印を置いています。画像バナーにする場合もリンクの目的が分かるaltを指定します。

<p class="waza-end-marker" tabindex="-1">この記事の説明はここまでです。</p>
<aside class="waza-end-banner" aria-label="関連情報" hidden>
<button type="button" class="waza-banner-close">閉じる</button>
<a href="https://motoki-design.co.jp/wordpress/">WordPressの実装例を探す</a>
</aside>

CSSを追加

.waza-end-banner[hidden] { display: none !important; }
.waza-end-banner {
  position: fixed; right: 16px; bottom: calc(16px + env(safe-area-inset-bottom));
  z-index: 80; width: min(280px, calc(100vw - 32px));
  padding: 12px; background: #fff; color: #222; border: 2px solid #766028;
  border-radius: 8px; box-shadow: 0 2px 12px #0002;
}
.waza-end-banner a { display: block; padding: 12px 0; color: #173b65; }
.waza-banner-close { padding: 8px 12px; border: 1px solid #555; color: #222; background: #fff; }
.waza-end-banner :focus-visible { outline: 3px solid #173b65; outline-offset: 2px; }

JavaScriptを追加

対象ページで1回読み込みます。既存のwindow.onloadを書き換えません。目印・パネル・閉じるボタンがないページやIntersectionObserver非対応環境では何もしません。

(() => {
  const init = () => {
    const marker = document.querySelector('.waza-end-marker');
    const banner = document.querySelector('.waza-end-banner');
    const close = banner?.querySelector('.waza-banner-close');
    if (!marker || !banner || !close || !('IntersectionObserver' in window)) return;
    let dismissed = false;
    const hide = () => {
      if (banner.contains(document.activeElement)) marker.focus({preventScroll: true});
      banner.hidden = true;
    };
    const observer = new IntersectionObserver(entries => {
      if (dismissed) return;
      const entry = entries[0];
      if (entry.isIntersecting || entry.boundingClientRect.bottom < 0) banner.hidden = false;
      else hide();
    });
    observer.observe(marker);
    close.addEventListener('click', () => { dismissed = true; hide(); observer.disconnect(); });
    banner.addEventListener('keydown', event => {
      if (event.key === 'Escape') { dismissed = true; hide(); observer.disconnect(); event.preventDefault(); }
    });
  };
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init, {once: true});
  else init();
})();

動く見本

次の目印までスクロールすると右下に案内が表示されます。閉じるボタンまたはパネル内のEscapeキーで閉じます。閉じた後は、このページを再読み込みするまで再表示しません。

この記事の説明はここまでです。

確認と戻し方

目印へ到達する前、到達時、通過後、上へ戻った時を確認します。初回から目印が画面内にある短い記事ではすぐ表示します。キーボードで閉じたときは目印へフォーカスを戻します。フォーカスを強制的にパネルへ移すことはしません。

スマホで本文や別の固定UIを隠さないか、閉じるボタンを操作できるか確認してください。この見本は関連リンクの案内で、全画面の広告やモーダルではありません。戻す場合は追加したHTML・CSS・JavaScriptを外します。旧fixed-wrapを操作するスクリプトも停止してから切り替えてください。

記事末尾で表示された固定バナーのスマホ実画面
2026年10月1日、公開ページを幅390pxで操作して撮影。
  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次