テーマ仕様書 更新履歴
2026年
2026/06/23更新

2026/06/23更新

+ 更新した行
- 削除した行

【GMO PG限定】クレジットカードの有効期限や下4桁を保持せず購入できるようにする

購入者がクレジットカード情報の一部(有効期限、カード番号下4桁、名義)をecforceへ保存せずに購入完了できる機能を追加しました。
「設定 > 購入/フォーム > 共通フォーム設定 (opens in a new tab)」の「購入時の『今回のみ利用する』チェックボックス表示」を「表示する」に設定すると、購入フォームに「今回のみ利用する」チェックボックスが表示されます。

本機能について

本機能は GMO PG(GMOペイメントゲートウェイ)をご利用のショップ様のみご利用いただけます。

cart > 注文情報確認画面

ec_force/shop/orders/confirm.html.liquid
ec_force/shop/orders/confirm.html+smartphone.liquid

     <!-- 支払い方法名 -->
     {{ order.payment.payment_method.name }}
 
+    {% if order.show_save_credit_card_checkbox? %}
+      <!-- 今回のみ利用 -->
+      {% if order.wants_save_credit_card_for_next_purchase? %}しない{% else %}する{% endif %}
+    {% endif %}
+
     <!-- クレジットカード一括 -->
     {% if order.payment.payment_method.one_time_payment? %}

cart > サンクスオファー確認画面

ec_force/shop/orders/cv_confirm.html.liquid
ec_force/shop/orders/cv_confirm.html+smartphone.liquid

     <!-- 支払い方法名 -->
     {{ order.payment.payment_method.name }}
 
+    {% if order.show_save_credit_card_checkbox? %}
+      <!-- 今回のみ利用 -->
+      {% if order.wants_save_credit_card_for_next_purchase? %}しない{% else %}する{% endif %}
+    {% endif %}
 
+    {% unless order.payment.source.internal_only %}
        <!-- クレジットカード一括 -->
        {% if order.payment.payment_method.one_time_payment? %}
        <!-- カード名義 -->
        {{ order.payment.source.name }}
 
       {% endif %}
+    {% endunless %}

cart > 支払い方法(部分テンプレート)

ec_force/shop/orders/_view_payment_information.html.liquid
ec_force/shop/orders/_view_payment_information.html+smartphone.liquid

        <!-- セキュリティコードの説明画像 -->
       <img src="{{ 'cvv_example.jpg' | image_url }}">
+
+      {% if order.show_save_credit_card_checkbox? %}
+        <div id="view-save-credit-card-for-next-purchase" {% if current_customer_has_card %}style="display:none;"{% endif %}>
+          <input type="hidden" name="order[save_credit_card_for_next_purchase]" value="1" {% if current_customer_has_card %}disabled{% endif %}>
+          <label class="checkbox-inline">
+            <input type="checkbox" name="order[save_credit_card_for_next_purchase]" value="0" {% if current_customer_has_card %}disabled{% endif %}>
+            今回のみ利用
+          </label>
+        </div>
+      {% endif %}
     </div>
     <!-- クレジットカード入力(PC用) ここまで-->
       <!-- セキュリティコードの説明画像 -->
       <img src="{{ 'cvv_example.jpg' | image_url }}">
+
+      {% if order.show_save_credit_card_checkbox? %}
+        <div id="view-save-credit-card-for-next-purchase" {% if current_customer_has_card %}style="display:none;"{% endif %}>
+          <input type="hidden" name="order[save_credit_card_for_next_purchase]" value="1" {% if current_customer_has_card %}disabled{% endif %}>
+          <label class="checkbox-inline">
+            <input type="checkbox" name="order[save_credit_card_for_next_purchase]" value="0" {% if current_customer_has_card %}disabled{% endif %}>
+            今回のみ利用
+          </label>
+        </div>
+      {% endif %}
     </div>
     <!-- クレジットカード入力(スマートフォン用) ここまで -->

ポイント履歴に「ポイント備考」を追加

マイページのポイント履歴一覧に、各履歴のポイント備考を表示する項目を追加しました。

mypage > ポイント履歴一覧画面

ec_force/shop/customer/points/index.html.liquid
ec_force/shop/customer/points/index.html+smartphone.liquid

       {% else %}
         {{ point.point_event.name }}
       {% endif %}
 
+      <!-- ポイント備考(任意) -->
+      {{ point.point_operation_log&.remarks | default: '-' }}
+
       <!-- 購入番号 -->
       {% if point.order.deleted_at != null or point.order.customer.id != current_customer.id or point.point_event.invite_coupon? or point.order == null %}

ポイント交換商品を複数まとめてカートに入れ、通常商品と一緒に1回の注文で購入できるようにする

cart > カート画面

ec_force/shop/carts/show.html.liquid
ec_force/shop/carts/show.html+smartphone.liquid

         <input name="_method" type="hidden" value="put">
         <input name="variant_id" type="hidden" value="{{ order_item.variant_id }}">
 
-        {% if order_item.set? or order_item.set_item_quantity != 0 or order_item.product.distribution_club or order_item.distribution_item_quantity != 0 %}
+        {% if order_item.set? or order_item.set_item_quantity != 0 or order_item.product.distribution_club or order_item.distribution_item_quantity != 0 or order_item.point_exchange_quantity != 0 %}
           <span>  {{ order_item.quantity }}個 </span>
         {% else %}
           <select name="quantity">

cart > 注文情報確認画面

ec_force/shop/orders/confirm.html.liquid
ec_force/shop/orders/confirm.html+smartphone.liquid

       {% else %}
         {{ order.grant_plan_point }}
         {{ order.grant_plan_general_point }}
-        {{ order.grant_plan_campaign_point }}
+        {% for campaign in order.campaigns_with_points %}
+          {{ campaign | liquid_grant_plan_campaign_display_name }}
+          {{ campaign.point }}
+        {% endfor %}
       {% endif %}
     {% endif %}

cart > サンクスオファー確認画面

ec_force/shop/orders/cv_confirm.html.liquid
ec_force/shop/orders/cv_confirm.html+smartphone.liquid

       {% else %}
         {{ order.grant_plan_point }}
         {{ order.grant_plan_general_point }}
-        {{ order.grant_plan_campaign_point }}
+        {% for campaign in order.campaigns_with_points %}
+          {{ campaign | liquid_grant_plan_campaign_display_name }}
+          {{ campaign.point }}
+        {% endfor %}
       {% endif %}
     {% endif %}
           <input id="cv_upsell_variant_id" name="order[order_items_attributes][][variant_id]" type="hidden" value="{{ item.variant.id }}">
           <input name="order[order_items_attributes][][quantity]" type="hidden" value="{{ item.quantity }}">
           <input name="order[order_items_attributes][][price]" type="hidden" value="{{ item.price }}">
+          {% if item.point_exchange_quantity > 0 %}
+            <input name="order[order_items_attributes][][point_exchange_quantity]" type="hidden" value="{{ item.point_exchange_quantity }}">
+          {% endif %}
         {% endif %}
       {% endfor %}

cart > 注文情報確認プレビュー(部分テンプレート)

ec_force/shop/orders/_view_payment_preview.html.liquid
ec_force/shop/orders/_view_payment_preview.html+smartphone.liquid

         <span id="grant_plan_point"></span>
         <label id="grant_plan_general_point_text" style="display: none;">付与予定ポイント(通常)</label>
         <span id="grant_plan_general_point" style="display: none;"></span>
-        <label id="grant_plan_campaign_point_text" style="display: none;"></label>
-        <span id="grant_plan_campaign_point" style="display: none;"></span>
+        <div id="grant_plan_campaign_point_events_row" style="display: none;">
+          <div id="grant_plan_campaign_point_events" style="display: none;"></div>
+        </div>
       {% endif %}
     </div>

selection > セレクション画面

ec_force/shop/selections/show.html.liquid
ec_force/shop/selections/show.html+smartphone.liquid

     {{ 'product_sale_summaries_total_sale desc' | ransack_sort_link: '人気順' }}
   </select>
 
-  <div>
+  <div id='add_product_async_view'>
+    <!-- カートに商品を追加用のメッセージ(任意) -->
+    <div id="cart-addition-success" style="display:none;">カートに商品を追加しました。</div>
+    <div id="cart-addition-failure" style="display:none;">
+      <div id="addition-failure-message"></div>
+      <div id="btn-show-addition-failure-details" style="display:none;">さらに詳しく</div>
+      <div id="addition-failure-details" style="display:none;"></div>
+      <div id="btn-hide-addition-failure-details" style="display:none;">閉じる</div>
+    </div>
+
     <!-- セレクション 商品一覧 -->
     {% for product in products %}
-      <!-- 販売価格(任意) -->
-      {{ product.first_price | number_to_currency: format: '%n %u' }}
+      <!-- ポイント交換商品の場合 -->
+      {% if has_point_exchange_item && product.master.point_exchangeable %}
+        <!-- ポイント交換(任意) -->
+        {{ product.first_price | number_to_currency: format: '%n' }}ポイント
+        <button class="btn-add-async" data-variant-id="{{product.master.id}}" data-quantity="1" data-has-point-exchange-item="1" {% if available_point < product.first_price %}disabled{% endif %}>ポイント利用で購入</button>
+      {% else %}
+        <!-- 販売価格(任意) -->
+        {{ product.first_price | number_to_currency: format: '%n %u' }}
+      {% endif %}
 
       <!-- レビュー平均点(任意) -->
       {% if product.average_star > 0 %}

shared_partial > cart_modal(部分テンプレート)

ec_force/shop/shared/_cart_modal.html.liquid
ec_force/shop/shared/_cart_modal.html+smartphone.liquid

               <!-- 数量 -->
-              {% if order_item.set? or order_item.set_item_quantity != 0 or order_item.product.distribution_club or order_item.distribution_item_quantity != 0 %}
+              {% if order_item.set? or order_item.set_item_quantity != 0 or order_item.product.distribution_club or order_item.distribution_item_quantity != 0 or order_item.point_exchange_quantity != 0 %}
                 {{ order_item.quantity }}個
               {% else %}

マイページの一部配送サイクル変更UX改善

mypage > 定期注文詳細画面 配送サイクル変更

ec_force/shop/customer/subs_orders/delivery_cycles/edit.html.liquid
ec_force/shop/customer/subs_orders/delivery_cycles/edit.html+smartphone.liquid

       <!-- 日付で指定 -->
       <div id='container_delivery_schedule_by_date'>
         何ヶ月ごとの何日に配送
-        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_month" id="subs_order_scheduled_to_be_delivered_every_x_month">
+        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_month" id="scheduled_to_be_delivered_every_x_month">
           {% if subs_order.available_delivery_dates.size > 0 %}
             {% assign months = subs_order.available_delivery_dates | map: 'month' %}
             {% for m in months %}
               <option value="{{ m }}" {% if subs_order.scheduled_to_be_delivered_every_x_month == m %}selected{% endif %}>{{ m }}ヶ月</option>
             {% endfor %}
           {% else %}
             {% for m in (1..12) %}
               <option value="{{ m }}" {% if subs_order.scheduled_to_be_delivered_every_x_month == m %}selected{% endif %}>{{ m }}ヶ月</option>
             {% endfor %}
           {% endif %}
         </select>
         ごとの
 
-        <select class="validate[required]" name="scheduled_to_be_delivered_on_xth_day" id="subs_order_scheduled_to_be_delivered_on_xth_day">
+        <select class="validate[required]" name="scheduled_to_be_delivered_on_xth_day" id="scheduled_to_be_delivered_on_xth_day">
           {% for d in (1..28) %}
             <option value="{{ d }}" {% if subs_order.scheduled_to_be_delivered_on_xth_day == d %}selected{% endif %}>{{ d }}日</option>
           {% endfor %}
           <option value="99" {% if subs_order.scheduled_to_be_delivered_on_xth_day == 99 %}selected{% endif %}>末日</option>
         </select>
         に配送
       </div>
 
       <!-- 間隔で指定 -->
       <div id='container_delivery_schedule_by_term'>
         何日ごとに配送
-        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_day" id="subs_order_scheduled_to_be_delivered_every_x_day">
+        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_day" id="scheduled_to_be_delivered_every_x_day">
           {% if subs_order.available_delivery_intervals.size > 0 %}
             {% assign intervals = subs_order.available_delivery_intervals | map: 'day' %}
             {% for interval in intervals %}
       <!-- 曜日で指定 -->
       <div id='container_delivery_schedule_by_day_of_week'>
         何ヶ月ごとの何回目の何曜日に配送
-        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_month" id="subs_order_scheduled_to_be_delivered_every_x_month">
+        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_month" id="scheduled_to_be_delivered_every_x_month_by_day_of_week">
           {% if subs_order.available_delivery_dates.size > 0 %}
             {% assign months = subs_order.available_delivery_dates | map: 'month' %}
             {% for m in months %}
               <option value="{{ m }}" {% if subs_order.scheduled_to_be_delivered_every_x_month == m %}selected{% endif %}>{{ m }}ヶ月</option>
             {% endfor %}
           {% else %}
             {% for m in (1..12) %}
               <option value="{{ m }}" {% if subs_order.scheduled_to_be_delivered_every_x_month == m %}selected{% endif %}>{{ m }}ヶ月</option>
             {% endfor %}
           {% endif %}
         </select>
         ごとの
 
-        <select class="validate[required]" name="scheduled_to_be_delivered_on_xth_day_of_week" id="subs_order_scheduled_to_be_delivered_on_xth_day_of_week">
+        <select class="validate[required]" name="scheduled_to_be_delivered_on_xth_day_of_week" id="scheduled_to_be_delivered_on_xth_day_of_week">
           {% for n in (1..4) %}
             <option value="{{ n }}" {% if subs_order.scheduled_to_be_delivered_on_xth_day_of_week == n %}selected{% endif %}>{{ n }}</option>
           {% endfor %}
         </select>
         回目の
 
-        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_day_of_week" id="subs_order_scheduled_to_be_delivered_every_x_day_of_week">
+        <select class="validate[required]" name="scheduled_to_be_delivered_every_x_day_of_week" id="scheduled_to_be_delivered_every_x_day_of_week">
           {% for d in (0..6) %}
             <option value="{{ d }}" {% if subs_order.scheduled_to_be_delivered_every_x_day_of_week == d %}selected{% endif %}>{{ day_of_weeks[d] }}</option>
           {% endfor %}
       <input name="recalculate_scheduled_to_be_delivered_at_based_on_last_order" type="radio" value="0">
       いいえ
       <!-- 現在の次回配送予定日 -->
-      {{ subs_order.scheduled_to_be_delivered_at | date: "%Y-%m-%d" }}
+      ※ 現在の次回配送予定日: {{ subs_order.scheduled_to_be_delivered_at | date: "%Y/%m/%d" }}
+      <span id="changed_scheduled_to_be_delivered_at_text" style="display: none;"></span>
     {% endif %}
 
     <!-- 戻るリンク -->

軽微な変更(改善)

購入フローの確認画面から入力画面に戻った場合でも、招待コードが消えずに維持されるように改善しました。

cart > 招待コード(部分テンプレート)

ec_force/shop/orders/_view_invite_code.html.liquid
ec_force/shop/orders/_view_invite_code.html+smartphone.liquid

   <!-- 招待コード入力欄 -->
   {% if customer_signed_in and current_customer.buy_times == 0 %}
     <label>招待コード</label>
-      <input type="text" name="order[invite_code]" placeholder="例)390039ca82">
+      <input type="text" name="order[invite_code]" value="{{ order.invite_code }}" placeholder="例)390039ca82">
       ※招待コードをお持ちのお客様はこちらにご入力下さい。
   {% endif %}

不具合修正

定期受注の商品を入れ替えた後、マイページの定期注文の編集画面で配送サイクルを意図通りに変更できない不具合を修正しました。

mypage > 定期注文詳細画面 基本情報の編集

ec_force/shop/customer/subs_orders/edit.html.liquid
ec_force/shop/customer/subs_orders/edit.html+smartphone.liquid

         <!-- 日付で指定 -->
         <div id='container_delivery_schedule_by_date'>
           <label for="subs_order_scheduled_to_be_delivered_every_x_month">何ヶ月ごとの何日に配送</label>
           <select class="validate[required]" name="subs_order[scheduled_to_be_delivered_every_x_month]" id="subs_order_scheduled_to_be_delivered_every_x_month">
             {% if subs_order.available_delivery_dates.size > 0 %}
               {% assign months = subs_order.available_delivery_dates | map: 'month' %}
+              {% unless months contains subs_order.scheduled_to_be_delivered_every_x_month %}<option value="" disabled selected>選択してください</option>{% endunless %}
               {% for m in months %}
                 <option value="{{ m }}" {% if m == subs_order.scheduled_to_be_delivered_every_x_month %}selected{% endif %}>{{ m }}ヶ月</option>
               {% endfor %}
         <!-- 間隔で指定 -->
         <div id='container_delivery_schedule_by_term'>
           <label for="subs_order_scheduled_to_be_delivered_every_x_day">何日ごとに配送</label>
           <select class="validate[required]" name="subs_order[scheduled_to_be_delivered_every_x_day]" id="subs_order_scheduled_to_be_delivered_every_x_day">
             {% if subs_order.available_delivery_intervals.size > 0 %}
               {% assign intervals = subs_order.available_delivery_intervals | map: 'day' %}
+              {% unless intervals contains subs_order.scheduled_to_be_delivered_every_x_day %}<option value="" disabled selected>選択してください</option>{% endunless %}
               {% for interval in intervals %}
                 <option value="{{ interval }}" {% if interval == subs_order.scheduled_to_be_delivered_every_x_day %}selected{% endif %}>{{ interval }}日</option>
               {% endfor %}
         <!-- 曜日で指定 -->
         <div id='container_delivery_schedule_by_day_of_week'>
           <label for="scheduled_to_be_delivered_every_x_month">何ヶ月ごとの何回目の何曜日に配送</label>
           <select class="validate[required]" name="subs_order[scheduled_to_be_delivered_every_x_month]" id="subs_order_scheduled_to_be_delivered_every_x_month">
             {% if subs_order.available_delivery_dates.size > 0 %}
               {% assign months = subs_order.available_delivery_dates | map: 'month' %}
+              {% unless months contains subs_order.scheduled_to_be_delivered_every_x_month %}<option value="" disabled selected>選択してください</option>{% endunless %}
               {% for m in months %}
                 <option value="{{ m }}" {% if subs_order.scheduled_to_be_delivered_every_x_month == m %}selected{% endif %}>{{ m }}ヶ月</option>
               {% endfor %}