Когда покупатель нажимает Add to cart, Aftersell обычно обрабатывает добавление сам, а не позволяет это делать теме. Эта страница объясняет, почему так происходит, что это значит для добавленных вами скриптов и как отключить перехват для одной формы или для всех сразу.
Большинству магазинов ничего из этого менять не нужно. Читайте дальше, если ваш скрипт перестал срабатывать при добавлении в корзину или если кнопка добавления в корзину ведёт себя странно.
Aftersell слушает submit добавления в корзину раньше темы. Когда он его распознаёт, он:
- Останавливает событие, чтобы ничего другое на странице не обработало этот клик.
- Отправляет добавление в Shopify сам.
- Открывает drawer Aftersell Cart.
Шаг 1 — самый важный, и именно из-за него существует эта страница.
Без этого на один и тот же клик реагируют обе корзины. Тема добавляет товар и открывает свою панель, Aftersell добавляет его и открывает свою, и покупатель видит две корзины, часто с товаром, добавленным дважды.
Остановка события — самый простой способ гарантировать одно добавление и одну корзину.
Остановка события останавливает его для всех, а не только для темы. Любой другой код, слушающий это же добавление в корзину, перестаёт работать: ваша аналитика, трекинг-пиксель, приложение подписок или комплектов, скрипт, который вы добавили сами.
Сбой происходит молча. В консоли браузера ничего не появляется, а само добавление работает, поэтому обычный симптом — неверное число, а не что-то видимо сломанное:
- события
add_to_cart отсутствуют в GA4, Meta или TikTok
- приложение подписок или комплектов работает на странице товара, но не через корзину
- ваш собственный
addEventListener на форме никогда не срабатывает
Если что-то из этого вам знакомо, причина именно в этом, и решение приведено ниже.
Когда Aftersell не перехватывает
Перехват включён не всегда. Aftersell не трогает добавление в корзину, когда:
- Он распознаёт корзину вашей темы. На темах, с которыми Aftersell умеет работать, он делает собственную корзину темы неактивной вместо блокировки события, а затем позволяет теме выполнить добавление обычным образом. Ваши скрипты работают, как всегда работали. См. Какие темы ниже.
- Форма не добавляет позицию. Форму без варианта
id и без items[] он не трогает.
- Вы отказались от перехвата одним из способов, описанных ниже.
Когда Aftersell не выполняет добавление, он всё равно следит за запросом корзины и открывает drawer, когда его видит. См. Прежде чем выбрать: что меняется.
Какие темы Aftersell распознаёт
Aftersell сопоставляет темы по тому, как они устроены, а не по названию, поэтому кастомная тема, ответвлённая от любой из этих, обычно тоже распознаётся, включая приватные сборки, которые Aftersell никогда не видел.
Верно и обратное: сильно кастомизированная сборка может отойти от своего исходника настолько, что Aftersell её больше не распознаёт, хотя тема всё ещё называется «Dawn». Присутствие в этом списке делает распознавание вероятным, но не гарантированным.
Выберите самый узкий, который решает вашу задачу. Каждая строка отдаёт больше, чем предыдущая.
Прежде чем выбрать: что меняется
Отказ от перехвата возвращает добавление вашей теме, и это поднимает два вопроса, на которые стоит ответить до выбора строки: откроется ли ваша корзина и не появится ли рядом с ней корзина темы.
Откроется ли ваша корзина?
Обычно да, без каких-либо действий с вашей стороны. Кто бы ни выполнял добавление, Aftersell следит за запросом, идущим к Shopify, и открывает drawer, когда его видит, следуя вашей обычной настройке Open cart when an item is added. Вам не нужно ничего вызывать самим.
Три ситуации это ломают, и у всех трёх есть решение:
Добавление идёт куда-то помимо стандартных cart-эндпоинтов Shopify. Aftersell следит за /cart/add, /cart/change, /cart/update и /cart/clear на вашем собственном домене. Приложение, добавляющее через собственный эндпоинт и синхронизирующее корзину потом, этому не видно. Откройте корзину сами, когда добавление этого приложения завершится:
Между кликом и запросом проходит более трёх секунд. Aftersell считает добавление, следующее непосредственно за реальным кликом или нажатием клавиши, инициированным покупателем. За пределами этого окна оно считается фоновым добавлением, которое не открывает drawer, если вы это не включите:
Ваша настройка корзины запрещает это. Если Open cart when an item is added выключено или вы установили open_on_add_to_cart: 'never', drawer никто не откроет. Это работа согласно конфигурации.
Откроется ли также корзина темы?
Это риск, который несут в себе отказы от перехвата, и ответ зависит от вашей темы.
Отключение собственной корзины темы отделено от перехвата и происходит при загрузке страницы в любом случае, поэтому ни один из здешних отказов не включает её обратно. На теме из списка распознаваемых собственная корзина темы остаётся тихой, и покупатель видит одну корзину, вашу.
На теме, которую Aftersell не распознаёт, ничто не сдерживает корзину темы. Отказ от перехвата означает, что тема обрабатывает добавление ровно так, как всегда, включая открытие собственной панели или переход на /cart, а Aftersell открывает свой drawer по замеченному запросу. Это две корзины, и именно ради этого существует перехват.
Если так происходит, у вас есть три варианта: оставить перехват включённым для этой формы, использовать более узкий отказ, не покрывающий формы, которые вызывают проблему, или самостоятельно остановить собственную корзину темы в коде темы.
Сначала включайте отказ от перехвата в тестовой или неопубликованной теме. Если собственная корзина темы появляется там, где её раньше не было, ваша тема не из тех, что Aftersell распознаёт, и для этих форм лучше оставить перехват включённым.
Это касается только добавления в корзину. Пропуск иконки корзины мимо Aftersell с помощью класса aftersell-cart-wont-open-cart — это другое: клик по иконке корзины не отправляет запрос, поэтому Aftersell нечего наблюдать, и drawer не откроется. См. ниже.
Предпочтительный вариант. Зарегистрируйте правило, возвращающее true для форм, которые вы хотите оставить в покое:
Разместите его в Cart settings → Custom script → Initialization. Правила аддитивны: ваше работает рядом с любыми другими, и любое правило, вернувшее true, пропускает эту форму. Подробности в Хуках.
Если вы не хотите писать правило, добавьте класс aftersell-cart-skip-atc в вашей теме:
Для submit формы класс должен быть на самом элементе form. Родительский div не сработает. Для кнопки, добавляющей в корзину без submit формы, класс может быть на кнопке или любом элементе вокруг неё.
Для всего магазина: отключить перехват
Грубый вариант. Добавление в корзину ведёт себя ровно так, как изначально задумано в вашей теме, для каждой формы:
Эта опция читается один раз, при загрузке корзины. Она работает только из скрипта Initialization вашей корзины. Установка её позже, внутри ready() или из обработчика события, ничего не делает и завершается молча.
Прибегайте к этому только тогда, когда варианты для отдельных форм не подходят, например когда формы, которые нужно исключить, создаёт другое приложение и вы не можете надёжно их идентифицировать.
Иконка корзины обрабатывается отдельно
Иконка корзины в вашем шапке обрабатывается собственным перехватчиком со своим отказом. Отключение перехвата добавления в корзину не меняет того, что делает иконка корзины, и наоборот.
Клик по иконке корзины открывает drawer Aftersell вместо перехода на /cart. Чтобы оставить одну иконку или кнопку в покое, добавьте к ней или к любому элементу вокруг неё класс aftersell-cart-wont-open-cart:
Этот элемент управления тогда делает то, для чего его создала ваша тема, обычно ведёт на страницу корзины. Aftersell полностью выходит из процесса, поэтому drawer не откроется. В отличие от добавления в корзину, здесь нет запроса, за которым можно наблюдать, поэтому если вы хотите, чтобы ваша корзина открылась от этого элемента, вам нужно сказать об этом:
Здесь применима та же проблема с заглушением: поскольку Aftersell останавливает клик, ваша аналитика и пиксели также не видят кликов по иконке корзины. Если исправить нужно только это, оставьте drawer и прекратите заглушение:
Ваши слушатели работают, drawer по-прежнему открывается, а клик по-прежнему не ведёт на /cart. Подробности в Configure.
Чтобы поменять то, какие элементы открывают корзину, а не отключать их, используйте Cart settings → Advanced → Cart icon selector вместо редактирования темы.