概要

スクリーンショット 2023-05-13 12.38.23.png

設定方法

スクリーンショット 2023-05-13 12.46.03.png

スクリーンショット 2023-05-13 12.31.59.png

{
  "type": "variant_comment",
  "name": "t:sections.main-product.blocks.variant_comment.name",
  "limit": 1
},
"variant_comment": {
  "name": "バリエーションコメント"
},

スクリーンショット 2023-05-13 12.32.09.png

{%- when 'variant_comment' -%}
  {%- unless product.has_only_default_variant -%}
    <div id="variant-comment"></div>
    <script>
    (()=>{
      const variationComments = 
      [{%- for variant in product.variants -%}
        {id:{{ variant.id }}, comment: '{{ variant.metafields.custom.comment | newline_to_br | strip_newlines }}'},
      {%- endfor -%}];
      // URLパラメータからvariant idを取得(無ければデフォルトidを設定)
      const defaultVariantId = {{ product.first_available_variant.id }};
      const extractVariantIdFromUrl = () => {
        const params = new URLSearchParams(window.location.search);
        const variantId = params.get('variant');
        return variantId ? parseInt(variantId) : defaultVariantId;
      }
      // variant id に合致するコメントを取得
      const findCommentByVariantId = (id) => {
          const variant = variationComments.find(variant => variant.id === id);
          return variant ? variant.comment : '';
      };
      // バリアントコメントを更新
      const updateVariantComment = () => {
        const current_variantId = extractVariantIdFromUrl();
        const comment = findCommentByVariantId(current_variantId);
        const commentElement = document.getElementById('variant-comment');
        commentElement.innerHTML = comment;
      }
      window.addEventListener('DOMContentLoaded', (event) => {
        // バリアントピッカーの変更イベントをトリガーにバリアントコメントを更新
        document.querySelectorAll('variant-radios input[type="radio"], variant-selects select')
        .forEach(input => input.addEventListener('change', () => {
          setTimeout(updateVariantComment, 100);
        }));
        updateVariantComment();
      });
    })();
    </script>
  {%- endunless -%}