کار نکردن دکمه «افزودن به سبد» همیشه یک خطا نیست: گاهی محصول متغیر بدون انتخاب ویژگی است، گاهی درخواست Ajax با 403 یا 500 برمیگردد و گاهی کالا در backend اضافه شده اما شمارنده سبد بهدلیل JavaScript یا cache بهروز نمیشود. ابتدا رفتار واقعی را مشخص کنید تا چند کلیک، تعداد ناخواسته نسازد.
پاسخ سریع: با مرورگر ناشناس و DevTools باز، محصول ساده و موجود را امتحان کنید. Console و request افزودن به سبد را از نظر status و response بررسی و سپس صفحه سبد را مستقیم باز کنید. اگر کالا آنجاست مشکل نمایش است؛ اگر نیست، validation، موجودی، session، WAF و خطای PHP را دنبال کنید.
دامنه خطا را مشخص کنید
- همه محصولات یا فقط یک محصول؟
- محصول ساده، متغیر یا رزروی؟
- فقط مهمان یا کاربر واردشده؟
- صفحه آرشیو یا خود محصول؟
- request ارسال میشود یا نه؟
- سبد خالی است یا فقط badge تغییر نمیکند؟
یک محصول ساده آزمایشی با قیمت و موجودی معتبر baseline مناسبی است. تنظیم محصول واقعی را بدون backup تغییر ندهید.
محصول متغیر و Validation
برای محصول متغیر باید ترکیب ویژگی معتبر انتخاب و variation قابل خرید باشد. موجودی، قیمت، وضعیت انتشار و محدودیت تعداد را بررسی کنید. پیام validation ممکن است پایین صفحه یا در response Ajax باشد و قالب آن را پنهان کرده باشد.
DevTools چه میگوید؟
| مشاهده | فرضیه | اقدام بعدی |
|---|---|---|
| هیچ request نیست | خطای JS یا handler قالب | اولین خطای Console |
| 403 | nonce، WAF یا rule امنیتی | request ID و log |
| 500 | Fatal یا exception PHP | PHP و WooCommerce log |
| 200 با HTML | redirect، challenge یا cache | response و redirect chain |
| Success ولی UI ثابت | fragment یا JavaScript | Cart مستقیم و Console |
method، status، مدت و response را ثبت کنید، اما cookie و token را منتشر نکنید.
JavaScript و بهینهسازی Asset
خطای یک script میتواند handlerهای بعدی را متوقف کند. ترکیب، delay یا defer فایلها نیز ترتیب dependency را تغییر میدهد. روی staging گزینههای بهینهسازی را یکییکی و با پاکسازی cache آزمایش کنید؛ خاموشکردن همزمان همه ابزارها علت را نامشخص میکند.
Session، Cookie و دامنه
سبد مهمان به cookie و session وابسته است. تفاوت دامنه با/بدون www، تغییر HTTP/HTTPS، SameSite یا proxy نادرست میتواند session تازه بسازد. metadata کوکی را بررسی کنید ولی مقدار آن را به اشتراک نگذارید. redirect به hostname دیگر یک نشانه مهم است.
Cache و CDN
endpoint افزودن به سبد و پاسخ شخصی نباید عمومی cache شود. ruleهای CDN، reverse proxy و افزونه را جدا بررسی کنید. cache اشتباه ممکن است سبد کاربر دیگری را نمایش دهد و مسئله حریم خصوصی بسازد. headerها را ثبت و فقط مسیر مرتبط را purge کنید.
WAF را کامل خاموش نکنید
اگر درخواست block شده، شناسه rule و false positive را مشخص و استثنای حداقلی بسازید. خاموشی کامل WAF یا کنترل CSRF راهحل پایدار نیست. پس از تغییر، ورودی نامعتبر و rate limit را نیز آزمایش کنید.
بررسی سمت سرور
WooCommerce Status log، PHP error log و access log را در همان timestamp ببینید. نمایش خطا برای بازدیدکنندگان را فعال نکنید. stack trace باید افزونه یا hook مالک را مشخص کند. اگر request کند یا timeout است، تشخیص کندی ووکامرس را اجرا کنید.
تداخل را امن پیدا کنید
- backup و staging همنسخه بسازید.
- سناریوی ثابت و نتیجه مورد انتظار ثبت کنید.
- با قالب سازگار و افزونههای ضروری baseline بگیرید.
- گروههای کوچک افزونه را اضافه کنید.
- گروه معیوب را عضوبهعضو بررسی کنید.
- Cart، Checkout و موجودی را smoke test کنید.
درگاه، ارسال یا افزونه موجودی production را بدون maintenance plan غیرفعال نکنید.
وقتی مشکل فقط در صفحه آرشیو است
افزودن Ajax در صفحه فروشگاه و دسته ممکن است با صفحه محصول مسیر متفاوتی داشته باشد. template سفارشی، quick view یا دکمهای که شناسه variation را نمیفرستد از نامزدهای اصلیاند. markup دکمه سالم و معیوب، data attributeها و response را مقایسه کنید؛ کپیکردن HTML دکمه استاندارد بدون hookهای لازم الزاماً درست نیست.
موجودی و درخواستهای همزمان
در فروش پرترافیک ممکن است موجودی بین نمایش صفحه و کلیک کاربر تغییر کند. پاسخ «قابل خرید نیست» را پنهان نکنید و برای دور زدن validation موجودی را اجباری تغییر ندهید. اگر سیستم ERP موجودی را sync میکند، timestamp، retry و ترتیب updateها را بررسی کنید. موفقیت ظاهری افزودن کالای ناموجود در Checkout به خطای دیرهنگام تبدیل میشود.
پیشگیری و مانیتورینگ
پس از هر release یک تست خودکار یا دستی برای محصول ساده و متغیر، مهمان و عضو داشته باشید. نرخ خطای endpoint افزودن، خطاهای JavaScript و 403/500 را مانیتور کنید. تغییرات CDN و optimization باید در همان changelog ثبت شوند تا زمان شروع regression قابل تشخیص باشد.
اشتباههای رایج
- کلیک چندباره و ایجاد تعداد ناخواسته
- cache کردن Ajax یا session
- نادیده گرفتن variation
- خاموش کردن WAF و TLS
- تست فقط با session قدیمی
- ویرایش مستقیم داده محصول در دیتابیس
تأیید اصلاح
محصول ساده و متغیر، مهمان و عضو، صفحه محصول و آرشیو را آزمایش کنید. تعداد، موجودی، mini-cart، Cart و انتقال به Checkout باید صحیح باشد. request تکراری و دوبارکلیک نیز نباید نتیجه غیرمنتظره بسازد.
چه زمانی کمک تخصصی لازم است؟
اگر کالا در backend اضافه میشود اما UI نادرست است یا خطا فقط زیر CDN رخ میدهد، آزمون production خطر دارد. پشتیبانی فروشگاه ووکامرس میتواند request، session، cache و JavaScript را در یک trace بررسی کند.
پرسشهای متداول
چرا فقط محصولات متغیر اضافه نمیشوند؟
variation، ویژگی اجباری، قیمت و موجودی ترکیب را بررسی کنید.
چرا کالا اضافه میشود ولی آیکن تغییر نمیکند؟
احتمالاً cart fragment یا JavaScript قالب مشکل دارد؛ Cart مستقیم را باز کنید.
آیا بازسازی permalink کمک میکند؟
فقط اگر endpoint واقعاً 404 است؛ برای validation یا JS اثری ندارد.