コンテンツにスキップ

フィーチャー済みお知らせバナー機能

概要

WordPressのお知らせ(Announcement)でisFeaturedtrueに設定されているものを、サイトトップに固定表示するバナー機能です。重要なお知らせを目立つ位置に表示するために使用します。

実装場所

  • コンポーネント: apps/storefront/src/components/layout/featured-announcement-banner.tsx
  • データ取得: apps/storefront/src/lib/wordpress/announcements.ts (fetchFeaturedAnnouncements)
  • 統合: apps/storefront/src/app/layout.tsx

機能仕様

表示条件

  • WordPressのお知らせ(Announcement)でannouncementMeta.isFeaturedtrueのもの
  • 複数のお知らせがある場合、全て同時に表示
  • 表示位置: ヘッダーの直下、画面の一番上

UI仕様

  • 背景色: 黄色の警告色(bg-amber-50
  • ボーダー: 黄色のボーダー(border-amber-200
  • バッジ: 「重要」ラベル(濃い黄色 bg-amber-600
  • レイアウト: コンテナ幅内、レスポンシブ対応

機能

  1. 複数表示: isFeatured: trueのお知らせを全て縦に並べて表示
  2. 個別非表示: 各お知らせごとに閉じるボタン(×)を配置
  3. リンク: お知らせをクリックすると詳細ページ(/announcements/{id})に遷移
  4. 状態管理: 非表示にしたお知らせはセッション中は再表示されない(クライアント側のstate管理)

WordPress設定

ACFフィールド設定

お知らせ(Announcement)の投稿タイプに以下のACFフィールドグループが必要です:

  • フィールドグループ名: announcementMeta
  • フィールド:
  • isFeatured: Boolean型(true/false)
  • relatedLink: URL型(任意)

GraphQLスキーマ

WPGraphQLで以下のクエリが利用可能である必要があります:

query AnnouncementList($first: Int!) {
  announcements(
    where: { orderby: { field: DATE, order: DESC } }
    first: $first
  ) {
    nodes {
      id
      databaseId
      title
      date
      slug
      link
      announcementMeta {
        isFeatured
        relatedLink
      }
    }
  }
}

環境変数設定

.env.local にサーバーサイド専用で以下を設定し、Storefront 側は /api/wordpress/graphql Route Handler を通じてアクセスします:

WORDPRESS_GRAPHQL_ENDPOINT=https://your-wordpress-site.com/graphql

使用方法

WordPress側での設定

  1. WordPress管理画面でお知らせを編集
  2. ACFフィールドの「フィーチャー済み」(isFeatured)をtrueに設定
  3. 公開・更新

バナーの非表示

ユーザーは各お知らせの右上にある×ボタンをクリックして、個別にお知らせを非表示にできます。非表示にしたお知らせは、ページをリロードするまで再表示されません。

技術詳細

データ取得

// apps/storefront/src/lib/wordpress/announcements.ts
export async function fetchFeaturedAnnouncements(
  options?: FetchAnnouncementsOptions,
): Promise<FeaturedAnnouncement[]>;
  • isFeaturedtrueのお知らせのみをフィルタリング
  • 日付の降順でソート
  • 最大20件まで取得

コンポーネント構造

// FeaturedAnnouncementBanner
//   └── AnnouncementItem (各お知らせ)
//       ├── Link (タイトル + バッジ)
//       └── Button (閉じるボタン)

スタイリング

  • Tailwind CSS v4 + shadcn/uiのセマンティックトークンを使用
  • 警告色としてamber系のカラーパレットを使用
  • レスポンシブデザイン対応

トラブルシューティング

バナーが表示されない

  1. WordPress側の設定確認
  2. isFeaturedtrueに設定されているか
  3. ACFフィールドが正しく設定されているか
  4. GraphQLスキーマにannouncementMetaが公開されているか

  5. 環境変数確認

  6. Storefront サーバー環境の WORDPRESS_GRAPHQL_ENDPOINT が正しいか
  7. /api/wordpress/graphql に対する POST が成功するか

  8. サーバーログ確認

  9. 開発環境では、サーバーログにデバッグ情報が出力されます
  10. [FeaturedAnnouncements] で始まるログを確認

エンドポイントURLの問題

  • パーマリンク設定が「プレーン」の場合、index.php?graphql形式になることがあります
  • WordPress管理画面 → 設定 → パーマリンク設定で、数字ベースまたはカスタム構造に変更してください
  • 詳細は docs/03-implementation/infrastructure/wordpress-local-development.md を参照

今後の拡張可能性

  • バナーの自動非表示(一定時間後に自動で閉じる)
  • ローカルストレージへの非表示状態の永続化
  • アニメーション効果の追加
  • 複数お知らせのスライダー表示(現在は全て同時表示)