> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# اعتراض الإضافة إلى السلة

> لماذا يتولى Aftersell عملية الإضافة إلى السلة، وكيف تعرف ما إذا كان نموذج ما معترضًا، وكل طرق استثناء نموذج.

عندما ينقر المتسوق **Add to cart**، عادةً ما يتولى Aftersell عملية الإضافة بنفسه بدلًا من ترك القالب يقوم بها. تشرح هذه الصفحة السبب، وماذا يعني ذلك للسكربتات التي أضفتها، وكيف توقف ذلك لنموذج واحد أو لجميع النماذج.

معظم المتاجر لا تحتاج أبدًا إلى تغيير أي من هذا. تابع القراءة إذا توقف أحد سكربتاتك عن العمل عند الإضافة إلى السلة، أو إذا كان زر إضافة إلى السلة يتصرف بشكل غريب.

## ماذا يفعل الاعتراض

يستمع Aftersell إلى إرسال الإضافة إلى السلة قبل القالب. عندما يتعرّف على واحد، فإنه:

1. يوقف الحدث، حتى لا يعالج ذلك النقر أي شيء آخر على الصفحة.
2. يرسل الإضافة إلى Shopify بنفسه.
3. يفتح درج Aftersell Cart.

الخطوة الأولى هي المهمة، وهي سبب وجود هذه الصفحة.

## لماذا يوجد

بدونه، تستجيب السلتان لنفس النقرة. يضيف القالب العنصر ويفتح درجه الخاص، ويضيفه Aftersell ويفتح درجنا، ويرى المتسوق سلتين، غالبًا مع إضافة العنصر مرتين.

إيقاف الحدث هو أبسط طريقة لضمان إضافة واحدة وسلة واحدة.

## ماذا يكلّف

إيقاف الحدث يوقفه **للجميع**، وليس للقالب فقط. أي كود آخر يستمع إلى نفس عملية الإضافة إلى السلة يتوقف عن العمل: تحليلاتك، بكسل تتبع، تطبيق اشتراكات أو حزم، سكربت أضفته بنفسك.

يفشل بصمت. لا يظهر شيء في وحدة تحكم المتصفح، وتظل الإضافة نفسها تعمل، لذا فإن العرض المعتاد هو رقم خاطئ بدلًا من شيء معطوب بشكل مرئي:

* أحداث `add_to_cart` مفقودة من GA4 أو Meta أو TikTok
* تطبيق اشتراكات أو حزم يعمل على صفحة المنتج لكنه لا يعمل عبر السلة
* `addEventListener` الخاص بك على النموذج لا ينطلق أبدًا

إذا كان أي من ذلك مألوفًا، فهذه الصفحة هي السبب والحل أدناه.

## متى لا يعترض Aftersell

الاعتراض ليس مشغّلًا دائمًا. يترك Aftersell الإضافة إلى السلة وشأنها عندما:

* **يتعرّف على سلة قالبك.** على القوالب التي يعرف Aftersell كيفية العمل معها، يجعل سلة القالب نفسها خاملة بدلًا من إيقاف الحدث، ثم يترك القالب يقوم بالإضافة بشكل عادي. تعمل سكربتاتك كما كانت دائمًا. راجع [أي القوالب](#which-themes-aftersell-recognizes) أدناه.
* **النموذج لا يضيف عنصر سطر.** يُترك النموذج الذي لا يحتوي على `id` متغير ولا `items[]` وشأنه.
* **لقد انسحبت** باستخدام إحدى الطرق أدناه.

عندما لا يقوم Aftersell بالإضافة، فإنه لا يزال يراقب طلب السلة ويفتح الدرج عندما يراه. راجع [قبل أن تختار: ما الذي يتغير](#before-you-choose-what-changes).

## أي القوالب يتعرّف عليها Aftersell

| القالب                                |                                                                                             |
| ------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Dawn** وباقي عائلة Shopify المجانية | Craft، Colorblock، Crave، Origin، Publisher، Refresh، Ride، Sense، Spotlight، Studio، Taste |
| **Horizon**                           | القالب الافتراضي الحالي لـ Shopify                                                          |
| **Impulse**                           |                                                                                             |

يعتمد Aftersell في المطابقة على **طريقة بناء القالب**، وليس على اسمه، لذا فإن القالب المخصص المتفرع من أي من هذه يُتعرّف عليه عادةً أيضًا، بما في ذلك الإصدارات الخاصة التي لم يرها Aftersell من قبل.

<Note>
  يحدث العكس أيضًا: يمكن أن ينحرف بناء مخصص بشكل كبير عن أصله بحيث لا يعود Aftersell يتعرّف عليه، حتى لو كان القالب لا يزال يُسمى "Dawn". وجودك في هذه القائمة يجعل التعرّف مرجّحًا، وليس مؤكدًا.
</Note>

## خياراتك

اختر الخيار الأضيق الذي يحل مشكلتك. كل صف يتنازل عن أكثر مما فوقه.

| الخيار                                                               | النطاق                      | لا يزال Aftersell يفتح الدرج |
| -------------------------------------------------------------------- | --------------------------- | ---------------------------- |
| [`registerSkipAddToCartRule`](#per-form-a-rule-in-code)              | النماذج التي تختارها قاعدتك | نعم، من طلب السلة            |
| [`aftersell-cart-skip-atc`](#per-form-a-class-in-your-theme)         | نموذج أو زر واحد            | نعم، من طلب السلة            |
| [`skip_add_to_cart_interceptor`](#whole-store-turn-interception-off) | كل نموذج في المتجر          | نعم، من طلب السلة            |

### قبل أن تختار: ما الذي يتغير

الانسحاب يعيد الإضافة إلى قالبك، وهذا يطرح سؤالين يستحقان الإجابة قبل أن تختار صفًا: هل ستفتح سلتك، وهل ستظهر سلة القالب إلى جانبها.

#### هل ستظل سلتك تفتح؟

عادةً نعم، دون أي عمل من جانبك. أيًا كان من يقوم بالإضافة، يراقب Aftersell الطلب المتجه إلى Shopify ويفتح الدرج عندما يراه، متبعًا إعداد **Open cart when an item is added** العادي لديك. لا يتعين عليك استدعاء أي شيء بنفسك.

ثلاثة مواقف تُخل بذلك، ولكل منها حل:

**تذهب الإضافة إلى مكان آخر غير نقاط نهاية سلة Shopify.** يراقب Aftersell `/cart/add` و`/cart/change` و`/cart/update` و`/cart/clear` على نطاقك الخاص. التطبيق الذي يضيف عبر نقطة نهايته الخاصة ثم يزامن السلة بعد ذلك ليس مرئيًا لهذا. افتح السلة بنفسك بمجرد انتهاء إضافة ذلك التطبيق:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.actions.refresh().then(() => {
  window.aftersell.cart.actions.open();
});
```

**تمر أكثر من ثلاث ثوانٍ تقريبًا بين النقرة والطلب.** يعامل Aftersell الإضافة التي تعقب مباشرة نقرة أو ضغطة مفتاح حقيقية على أنها من فعل المتسوق. بعد تلك النافذة تُعتبر إضافة خلفية، لا تفتح الدرج ما لم تنضم إلى ذلك:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ open_on_background_add: true });
```

**إعداد سلتك يقول ألا تفعل.** إذا كان **Open cart when an item is added** معطلًا، أو كنت قد ضبطت `open_on_add_to_cart: 'never'`، فلا شيء يفتح الدرج. هذا يعمل كما هو مُهيأ.

#### هل ستفتح سلة القالب أيضًا؟

هذه هي المخاطرة التي تحملها خيارات الانسحاب، والإجابة تعتمد على قالبك.

جعل سلة القالب خاملة **منفصل عن الاعتراض** ويحدث عند تحميل الصفحة في كلتا الحالتين، لذا لا يعيد أي من خيارات الانسحاب هنا تشغيلها. على قالب من [قائمة القوالب المتعرَّف عليها](#which-themes-aftersell-recognizes)، تظل سلة القالب نفسها هادئة ويرى المتسوق سلة واحدة، سلتك.

على قالب لا يتعرّف عليه Aftersell، لا يوجد شيء يمنع سلة القالب. يعني الانسحاب أن القالب يعالج الإضافة تمامًا كما كان يفعل دائمًا، بما في ذلك فتح درجه الخاص أو إعادة التوجيه إلى `/cart`، بينما يفتح Aftersell درجه من الطلب الذي رآه. تلك سلتان، وهي السبب في وجود الاعتراض من الأساس.

إذا حدث ذلك، فأمامك ثلاثة خيارات: اترك الاعتراض مشغلًا لذلك النموذج، أو استخدم خيار انسحاب أضيق لا يغطي النماذج المسببة له، أو أوقف سلة القالب الخاصة بنفسك في كود قالبك.

<Tip>
  شغّل خيار الانسحاب أولًا في قالب اختباري أو غير منشور. إذا ظهرت سلة القالب حيث لم تكن تظهر من قبل، فإن قالبك ليس من القوالب التي يتعرّف عليها Aftersell، وستريد إبقاء الاعتراض مشغلًا لتلك النماذج.
</Tip>

<Note>
  ينطبق هذا على الإضافة إلى السلة فقط. جعل **أيقونة السلة** تتجاوز Aftersell بالصنف `aftersell-cart-wont-open-cart` أمر مختلف: نقرة أيقونة السلة لا ترسل أي طلب، لذا لا يوجد شيء ليراقبه Aftersell، ولن يفتح الدرج. راجع أدناه.
</Note>

### لكل نموذج: قاعدة في الكود

الخيار المفضل. سجّل قاعدة تُرجع `true` للنماذج التي تريد تركها وشأنها:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.hooks.registerSkipAddToCartRule((form) =>
  form.hasAttribute('data-skip-aftersell')
);
```

ضعها في **Cart settings → Custom script → Initialization**. القواعد تراكمية: قاعدتك تعمل إلى جانب أي قواعد أخرى، وأي قاعدة تُرجع `true` تتخطى ذلك النموذج. التفاصيل الكاملة في [الخطافات](/ar/aftersell/cart/sdk-hooks#registerskipaddtocartrule).

### لكل نموذج: صنف في قالبك

إذا كنت تفضل عدم كتابة قاعدة، فأضف الصنف `aftersell-cart-skip-atc` في قالبك:

```html theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<form action="/cart/add" method="post" class="aftersell-cart-skip-atc">
```

<Note>
  لإرسال نموذج، يجب أن يكون الصنف على **عنصر النموذج نفسه**. لن يعمل على `div` أب. أما بالنسبة لزر يضيف إلى السلة دون إرسال نموذج، فيمكن أن يكون الصنف على الزر أو على أي عنصر حوله.
</Note>

### المتجر بأكمله: إيقاف الاعتراض

الخيار الفج. تتصرف الإضافة إلى السلة تمامًا كما كان يفعل قالبك أصلًا، على كل نموذج:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ skip_add_to_cart_interceptor: true });
```

<Warning>
  يُقرأ هذا **مرة واحدة، عند تحميل السلة**. لا يعمل إلا من سكربت **Initialization** الخاص بسلتك. ضبطه لاحقًا، داخل `ready()` أو من معالج حدث، لا يفعل شيئًا ويفشل بصمت.
</Warning>

الجأ إلى هذا فقط عندما لا تناسب خيارات لكل نموذج، مثلًا عندما تكون النماذج التي تحتاج إلى استثنائها منشأة من قِبل تطبيق آخر ولا يمكنك تحديدها بشكل موثوق.

## أيقونة السلة منفصلة

أيقونة السلة في رأس صفحتك يعالجها معترضها الخاص، بخيار انسحاب خاص به. إيقاف اعتراض الإضافة إلى السلة لا يغير ما تفعله أيقونة السلة، والعكس صحيح أيضًا.

النقر على أيقونة السلة يفتح درج Aftersell بدلًا من الذهاب إلى `/cart`. لترك أيقونة أو زر واحد وشأنه، أضف الصنف `aftersell-cart-wont-open-cart` إليه، أو إلى أي عنصر حوله:

```html theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
<a href="/cart" class="aftersell-cart-wont-open-cart">Cart</a>
```

يفعل عنصر التحكم ذاك حينها ما يجعله قالبك يفعله، وهو عادة الذهاب إلى صفحة السلة. Aftersell خارج الصورة تمامًا، لذا **لن يفتح الدرج**. على عكس الإضافة إلى السلة، لا يوجد طلب لمراقبته، لذا إذا كنت تريد أن تفتح سلتك من عنصر التحكم ذاك فعليك أن تقول ذلك:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
document.querySelector('#my-cart-link').addEventListener('click', (event) => {
  event.preventDefault();
  window.aftersell.cart.actions.open();
});
```

تنطبق مشكلة الإسكات نفسها هنا: لأن Aftersell يوقف النقرة، لا ترى تحليلاتك والبكسلات نقرات أيقونة السلة أيضًا. إذا كان هذا كل ما تحتاج إلى إصلاحه، فأبقِ الدرج وأوقف الإسكات:

```js theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
window.aftersell.cart.configure({ skip_open_cart_interceptor: true });
```

تعمل مستمعاتك، ولا يزال الدرج يفتح، ولا تزال النقرة لا تنتقل إلى `/cart`. التفاصيل الكاملة في [التهيئة](/ar/aftersell/cart/sdk-configure#skip_open_cart_interceptor).

<Note>
  لتغيير *أي* العناصر تفتح السلة بدلًا من إيقافها، استخدم **Cart settings → Advanced → Cart icon selector** بدلًا من تحرير قالبك.
</Note>

## إلى أين تذهب بعد ذلك

* **[التهيئة](/ar/aftersell/cart/sdk-configure)**: كل خيار في SDK، بما في ذلك تلك المشار إليها هنا.
* **[الخطافات](/ar/aftersell/cart/sdk-hooks)**: تحكّم على مستوى كل نموذج وكل سطر.
* **[فتح الدرج من منشئ صفحات](/ar/aftersell/cart/sdk-use-case-page-builder)**: من أجل Replo وPageFly وGemPages والأزرار المخصصة التي تضيف إلى السلة بطريقتها الخاصة.
