عدم نمایش روش‌های ارسال در ووکامرس یکی از آن خطاهایی است که وقتی رخ می‌دهد، معمولاً مشتری حتی نمی‌داند چه اتفاقی افتاده — فقط می‌بیند که نمی‌تواند سفارش را نهایی کند، چون هیچ گزینه‌ای برای انتخاب نحوه ارسال وجود ندارد. برخلاف بسیاری از خطاهای ووکامرس که با پیام یا صفحه سفید همراهند، این خطا در سکوت رخ می‌دهد: صفحه پرداخت سالم است، فرم پر می‌شود، اما بخش Shipping Methods خالی می‌ماند. در این مقاله، همان مسیری را طی می‌کنم که برای ردیابی این خطا در پروژه‌های واقعی فروشگاهی استفاده می‌کنم — از زنجیره تطبیق منطقه ارسال تا لایه‌های پنهانی که معمولاً نادیده گرفته می‌شوند.

معماری نمایش روش ارسال در ووکامرس

برای اینکه بتوانید دقیقاً بفهمید چرا روش ارسال نمایش داده نمی‌شود، باید ببینید ووکامرس در لایه زیرین چه چیزی را مدل می‌کند. نمایش روش ارسال نتیجه یک زنجیره دقیق است: ووکامرس ابتدا بسته ارسال (Shipping Package) را از اقلام سبد می‌سازد، سپس نشانی کاربر را با مناطق ارسال (Shipping Zones) تطبیق می‌دهد، سپس از بین روش‌های فعال در آن منطقه، روش‌های واجد شرایط را انتخاب می‌کند، و در نهایت یک یا چند نرخ (WC_Shipping_Rate) تولید می‌کند که در صفحه پرداخت به‌عنوان گزینه نمایش داده می‌شوند. اگر در هر مرحله از این زنجیره، نتیجه خالی باشد، هیچ روشی نمایش داده نمی‌شود — بدون پیام خطای واضح.

نکته‌ای که اکثر ادمین‌ها نمی‌دانند: ووکامرس این زنجیره را «در لحظه» محاسبه نمی‌کند، بلکه آن را در دو نقطه خاص اجرا می‌کند: هنگام بارگذاری اولیه صفحه پرداخت، و هنگام به‌روزرسانی سبد یا نشانی از طریق AJAX. اگر هر یک از این دو نقطه به‌دلیل کش، قطع نشست یا خطای JavaScript از کار بیفتد، فهرست روش‌های ارسال خالی می‌ماند. اگر با معماری کلی ووکامرس آشنایی ندارید، ابتدا ووکامرس چیست و چگونه فروشگاه بسازیم را بخوانید تا چارچوب ذهنی‌تان شکل بگیرد. مفهوم روش‌های حمل و نقل در لجستیک تجارت الکترونیک هم در Shipping method ویکی‌پدیا مرور شده است.

در ووکامرس، «نمایش داده نشدن» یک خطا نیست؛ یک نتیجه خالی از یک زنجیره اعتبارسنجی است. برای حل مسئله، باید بفهمید کدام حلقه نتیجه را خالی کرده.

سه لایه‌ای که باید تفکیک شوند

در تجربه من، خطای عدم نمایش روش ارسال همیشه در یکی از این سه لایه ریشه دارد. تفکیک لایه پیش از هر اقدام، نیمی از راه را رفته‌اید:

  • لایه داده: منطقه، روش یا کلاس به‌درستی تعریف نشده یا فعال نیست.
  • لایه تطبیق: نشانی کاربر با هیچ منطقه‌ای منطبق نمی‌شود یا شرط واجد‌بودن شکست می‌خورد.
  • لایه محیط: کش، نشست، افزونه یا API خارجی، محاسبه را در لحظه اجرا نمی‌کند.

جدول زیر نگاشت سریع سیمپتوم به لایه خطا را نشان می‌دهد:

سیمپتوملایه احتمالیاولین اقدام تشخیصی
هیچ روش ارسالی برای هیچ نشانی نمایش داده نمی‌شودلایه دادهبررسی وجود منطقه فعال و روش داخل آن
فقط برای بعضی استان‌ها خالی استلایه تطبیقبررسی پوشش استانی مناطق
روش ظاهر می‌شود اما پس از تغییر نشانی ناپدید می‌شودلایه محیطبررسی کش صفحه پرداخت و AJAX
روش برای محصولات خاصی نمایش داده نمی‌شودلایه واجد‌بودنبررسی کلاس ارسال و شرایط روش

تطبیق نشانی با منطقه ارسال

قلب معماری ارسال در ووکامرس، تطبیق نشانی کاربر با مناطق ارسال است. هر منطقه، یک محدوده جغرافیایی دارد که بر اساس کشور، استان، شهر یا حتی کد پستی تعریف می‌شود. وقتی کاربر نشانی خود را در صفحه پرداخت وارد می‌کند، ووکامرس کشور و استان را با مناطق تعریف‌شده مقایسه می‌کند و اولین منطقه منطبق را انتخاب می‌کند. اگر هیچ منطقه‌ای منطبق نباشد، فهرست روش‌ها خالی می‌ماند. این اولین و شایع‌ترین ریشه «عدم نمایش روش ارسال» است.

سه اشتباه کلاسیک در این لایه:

  1. پوشش ناقص استان‌ها: اگر منطقه را فقط برای «تهران» تعریف کرده‌اید و کاربر از اصفهان سفارش می‌دهد، هیچ روشی نمایش داده نمی‌شود. راه‌حل: همیشه یک منطقه سراسری (Rest of the World) با روش پیش‌فرض داشته باشید.
  2. عدم تطابق با کد استاندارد: ووکامرس برای هر کشور، از کد ایالت استاندارد استفاده می‌کند نه متن آزاد. اگر کاربر داده وارد شده از فرم سفارشی را ارسال کند، تطبیق شکست می‌خورد.
  3. استفاده از کاراکترهای عربی یا خاص: نام استان‌ها در فهرست پیش‌فرض ووکامرس، حروف استاندارد فارسی دارند. اگر در تنظیمات، نام استان با کاراکتر متفاوتی وارد شده باشد، تطبیق رخ نمی‌دهد.

روش تشخیص قطعی: در پیشخوان ووکامرس، بخش «تنظیمات → حمل و نقل»، همه مناطق را ببینید و محدوده هرکدام را دقیقاً بررسی کنید. سپس با یک سبد تست، نشانی از هر استان وارد کنید و ببینید کدام منطقه فعال می‌شود. اگر برای بعضی استان‌ها هیچ منطقه‌ای فعال نمی‌شود، ریشه همین لایه است. تنظیمات اولیه ارسال را در تنظیم روش‌های ارسال در ووکامرس گام‌به‌گام توضیح داده‌ام.

منطقه بدون روش فعال

لایه‌ای که کم‌تر کسی به آن توجه می‌کند: امکان دارد منطقه ارسال به‌درستی با نشانی کاربر منطبق شود، اما هیچ روش ارسالی داخل آن منطقه فعال نباشد. این سناریو زمانی رخ می‌دهد که ادمین، منطقه را ساخته اما فراموش کرده یک روش (Flat Rate، Free Shipping، Local Pickup، یا روش افزونه) داخل آن اضافه کند. نتیجه: ووکامرس منطقه را پیدا می‌کند اما فهرست روش‌های داخل آن خالی است و در نهایت، هیچ گزینه‌ای به کاربر نمایش داده نمی‌شود.

سه نکته دقیق در این لایه:

  • روش غیرفعال داخل منطقه: روش ارسال ممکن است «غیرفعال» باشد ولی به‌نظر ادمین «ساخته‌شده» باشد. حتماً در تنظیمات منطقه، وضعیت فعال یا غیرفعال بودن را ببینید.
  • روش بدون محدوده: بعضی روش‌ها در نسخه‌های جدید ووکامرس، بدون محدوده جغرافیایی ذخیره می‌شوند. اگر چنین روشی داخل منطقه‌ای باشد، ممکن است به‌درستی اعمال نشود.
  • روش پیش‌فرض حذف‌شده: اگر ادمین روش Flat Rate پیش‌فرض را حذف کرده و روش جدیدی جایگزین نکرده، منطقه بی‌روش می‌ماند.

روش تشخیص سریع: در ویرایش هر منطقه، فهرست روش‌های داخل آن را ببینید. اگر خالی بود یا روش‌ها در حالت غیرفعال بودند، همین لحظه رفع کنید و تست بگیرید. اگر پس از این اقدام روش‌ها نمایش داده شدند، ریشه همین لایه بوده است.

شرایط واجد‌بودن و محدودیت‌ها

هر روش ارسال، شرایط واجد‌بودن (Eligibility) مشخصی دارد که تعیین می‌کند در کدام سبد خرید فعال شود. اگر این شرایط در سبد کاربر برقرار نباشد، روش مخفی می‌شود و ممکن است هیچ روش دیگری هم فعال نباشد. سه شرط اصلی:

  • حداقل مبلغ سفارش: بعضی روش‌ها فقط برای سبدهای بالای مبلغی فعال می‌شوند.
  • حداکثر مبلغ سفارش: بعضی روش‌ها فقط برای سبدهای زیر مبلغ مشخص فعال می‌شوند.
  • الزام به محدوده خاص: بعضی روش‌ها برای محصولات خاص، مقصد خاص یا بازه زمانی خاص محدود می‌شوند.

سه خطای رایج در این لایه:

  1. حداقل مبلغ اشتباه: اگر min_amount روی ۵۰۰ هزار تومان باشد و سبد مشتری ۴۹۰ هزار تومان، روش غیرفعال می‌شود و فهرست خالی می‌ماند.
  2. تداخل حداقل و حداکثر: اگر حداقل بیشتر از حداکثر تنظیم شده باشد، هیچ سبدی واجد شرایط نیست و همیشه فهرست خالی است.
  3. شرط وابسته به کوپن: بعضی روش‌ها فقط وقتی فعال می‌شوند که کوپن خاصی اعمال شده باشد. اگر کوپن اعمال نشود، هیچ روشی نمایش داده نمی‌شود.

روش تشخیص: در پیشخوان، در ویرایش هر روش ارسال، تمام شرط‌ها را یک‌بار بازبینی کنید. در محیط استجینگ با یک سبد ساده تست بگیرید. اگر فقط با سبد خاصی خطا رخ می‌دهد، ریشه در شرط واجد‌بودن است نه در معماری کلی.

Shipping Classes و وزن محصول

کلاس ارسال (Shipping Class) و وزن محصول، دو پارامتری هستند که در بعضی روش‌ها مستقیماً روی نمایش یا عدم‌نمایش اثر می‌گذارند. اگر روش ارسال شما بر اساس کلاس یا وزن محصول محاسبه می‌کند و محصول در سبد، کلاس معتبر یا وزن معتبر ندارد، ممکن است نرخ صفر باشد یا روش اصلاً نمایش داده نشود.

سه اشتباه دقیق در این لایه:

  1. محصول بدون کلاس ارسال: اگر روش شما برای کلاس خاصی تعریف شده و محصول در سبد هیچ کلاسی ندارد، روش غیرفعال می‌شود. برای هر محصول، حتماً یک کلاس اختصاص دهید یا «بدون کلاس» را در تنظیمات روش پوشش دهید.
  2. وزن خالی: اگر روش ارسال بر اساس وزن محاسبه می‌کند و وزن محصول در دیتابیس خالی است، ممکن است فرمول به‌جای خطا، صفر برگرداند و روش نمایش داده نشود. مدیریت وزن در مدیریت موجودی محصولات در ووکامرس و ابعاد محصول در ایجاد محصول در ووکامرس آمده است.
  3. کلاس‌های ناهمگون در سبد: وقتی سبد شامل چند کلاس مختلف باشد، بعضی افزونه‌ها روش را فقط برای یک کلاس نمایش می‌دهند و برای بقیه پنهان می‌کنند. رفتار دقیق را با سبد مختلط تست کنید.

روش تشخیص قطعی: یک سبد تست با محصولی از هر کلاس بسازید و ببینید کدام روش برای هر ترکیب ظاهر می‌شود. اگر ترکیب خاصی بی‌روش است، ریشه در لایه کلاس یا وزن است.

در ارسال ووکامرس، خالی بودن فهرست روش‌ها همیشه به معنی نبود منطقه نیست. گاهی منطقه هست، روش هم هست، اما شرط واجد‌بودن به‌خاطر وزن یا کلاس، سبد را رد کرده است.

AJAX، نشست و کوکی

وقتی کاربر نشانی خود را در صفحه پرداخت تغییر می‌دهد، ووکامرس باید فهرست روش‌های ارسال را از طریق AJAX به‌روزرسانی کند. اگر این درخواست AJAX به هر دلیل ناموفق باشد، فهرست روش‌ها خالی می‌ماند و کاربر نمی‌فهمد چرا. این یکی از سناریوهایی است که در ظاهر شبیه «نبود منطقه» است اما در واقع، لایه محیط مسئول خطاست.

سه علت رایج در این لایه:

  • مسدودسازی AJAX توسط فایروال: بعضی افزونه‌های امنیتی، درخواست‌های AJAX ووکامرس را با الگوی «مشکوک» بلاک می‌کنند. نتیجه: درخواست wc-ajax=update_order_review با 403 رد می‌شود و فهرست روش‌ها به‌روزرسانی نمی‌شود. راهنمای این لایه در امنیت فروشگاه ووکامرس آمده است.
  • خطای JavaScript در قالب: اگر قالب یا افزونه‌ای، اجرای اسکریپت checkout.js را با یک خطای ناخواسته بشکند، درخواست AJAX اصلاً ارسال نمی‌شود. بررسی کنسول مرورگر اولین اقدام است؛ روش دقیق در پیدا کردن خطاهای جاوااسکریپت در کنسول آمده.
  • قطع نشست کاربر: اگر نشست ووکامرس منقضی شود یا کوکی نشست به هر دلیل حفظ نشود، درخواست AJAX بدون نشست معتبر ارسال می‌شود و نتیجه خالی برمی‌گردد.

روش تشخیص: کنسول مرورگر را باز کنید، روی تغییر نشانی در صفحه پرداخت، تب Network را فیلتر کنید روی wc-ajax یا admin-ajax.php، و پاسخ دقیق را ببینید. اگر پاسخ 403 یا محتوای JSON خالی داشت، ریشه همین لایه است.

کش و CDN؛ گلوگاه نامرئی

لایه‌ای که بیشترین سردرگمی را می‌سازد: کش. صفحه پرداخت، از منظر معماری، یک صفحه stateful است — یعنی محتوای آن برای هر کاربر متفاوت است. اگر افزونه کش این صفحه را به‌اشتباه عمومی (public) کش کند، کاربر نسخه‌ای می‌بیند که برای کاربر دیگری ساخته شده و روش‌های ارسال آن، با نشانی کاربر فعلی مطابقت ندارد. نتیجه: فهرست روش‌ها در ظاهر خالی است.

سه سناریوی دقیق در این لایه:

  • کش صفحه پرداخت: صفحه /checkout باید همیشه از کش استثنا باشد. اصول کش در ووکامرس را در بهترین افزونه‌های کش وردپرس و تنظیمات دقیق را در پیکربندی افزونه کش توضیح داده‌ام.
  • CDN حذف کوکی نشست: بعضی CDNها، کوکی‌های نشست ووکامرس را کش می‌کنند یا حذف می‌کنند. نتیجه: ووکامرس نمی‌تواند نشانی کاربر را در نشست پیدا کند و بنابراین نمی‌تواند منطقه ارسال را تعیین کند.
  • کش آبجکت با TTL بالا: اگر کش آبجکت با TTL بالا فعال باشد و داده‌های منطقه ارسال را کش کند، تغییرات اخیر ادمین فوراً اعمال نمی‌شود و کاربر فهرست خالی می‌بیند.

روش تشخیص قطعی: در پنجره ناشناس (Incognito) بدون کش، تست کنید. اگر روش‌های ارسال درست نمایش داده شدند، ریشه در لایه کش است. سپس کش را کاملاً پاک کنید و در حالت عادی تست بگیرید.

تضاد افزونه و قالب

افزونه‌های جانبی که برای بهبود ارسال یا تغییر صفحه پرداخت نصب می‌شوند، بیشترین سهم خطا را در این لایه دارند. در پرونده‌های پشتیبانی، این سه دسته بیش از بقیه دیده می‌شوند:

  1. افزونه‌های چندگانه ارسال: نصب همزمان چند افزونه ارسال پویا باعث می‌شود دو فرمول روی صف نمایش بنشینند و نتیجه غیرقابل‌پیش‌بینی شود. یک افزونه، یک مسیر.
  2. افزونه‌های صفحه‌ساز صفحه پرداخت: بعضی صفحه‌سازها، ساختار صفحه پرداخت را بازنویسی می‌کنند و رویداد AJAX محاسبه ارسال را در صفحه جدید به‌درستی فعال نمی‌کنند.
  3. افزونه‌های تغییر قالب صفحه پرداخت: اگر افزونه‌ای، بخش shipping_method را با ساختار سفارشی خودش بسازد، ممکن است روش‌های اضافه‌شده از طریق ووکامرس را نبیند.

روش تشخیص، همان روش کلاسیک «نصف‌سازی» است: روی استجینگ، نیمی از افزونه‌ها را غیرفعال کنید و تست بگیرید. برای درک ساختار انضباطی این روش، رفع تضاد افزونه‌ها در وردپرس راهنمای دقیقی است. برای مقایسه کیفیت افزونه‌ها پیش از خرید، بررسی سازگاری قالب و افزونه را ببینید.

شکست API سرویس‌های ارسال

وقتی از افزونه‌های ارسال پویا (اتصال به پست، تیپاکس، ماهکس، ال‌پست و غیره) استفاده می‌کنید، نمایش روش‌های ارسال کاملاً وابسته به پاسخ API سرویس خارجی است. اگر این API خطا بدهد، کند پاسخ دهد یا کلید API معتبر نباشد، در بسیاری موارد افزونه به‌جای نمایش پیام خطا، فهرست روش‌ها را خالی برمی‌گرداند. این سناریو در بازار ایران شایع است چون APIهای داخلی، گاهی ناپایدار هستند یا محدودیت IP دارند.

سه علت دقیق در این لایه:

  • کلید API نامعتبر: اگر کلید API به‌دلیل انقضا یا تغییر در پنل سرویس، دیگر معتبر نباشد، پاسخ خطا برمی‌گردد و لیست خالی می‌شود.
  • IP سرور شما بلاک شده: بعضی APIهای داخلی، IPهای «مشکوک» را بلاک می‌کنند. اگر IP سرور شما در لیست سیاه باشد، هیچ پاسخی دریافت نمی‌کنید.
  • Timeout در پاسخ: اگر زمان پاسخ از max_execution_time سرور بیشتر باشد، درخواست قطع می‌شود و لیست خالی می‌ماند. رفع این سناریو در رفع خطای Maximum execution time آمده است.

روش تشخیص قطعی: در لاگ افزونه ارسال، دقیقاً پاسخ API را ببینید. اگر پاسخ خطا داشت اما فهرست خالی نمایش داده شد، ریشه در لایه API است نه در ووکامرس. اصول اتصال به API در اتصال ووکامرس به APIهای خارجی آمده است.

مالیات، ارز و نکات محلی

در فروشگاه‌های چندزبانه یا چندارزی، لایه جدیدی از پیچیدگی به نمایش روش‌های ارسال اضافه می‌شود. اگر از افزونه‌هایی مثل WPML یا Polylang استفاده می‌کنید، تنظیمات ارسال ممکن است به زبان خاصی وابسته شوند یا در همه زبان‌ها اعمال نشوند. سه سناریوی دقیق:

  1. تنظیمات ارسال برای یک زبان: اگر منطقه یا روش به زبان خاصی محدود شود، در زبان دیگر فهرست خالی نمایش داده می‌شود.
  2. عدم تطابق ارز: اگر افزونه چندارزی فعال باشد، هزینه‌ها در ارز اصلی مقایسه می‌شوند اما نمایش در ارز کاربر است. در بعضی افزونه‌ها، این تبدیل باعث خطای محاسبه می‌شود که در نهایت فهرست روش‌ها را خالی می‌کند.
  3. مالیات ارسال در کشورهای خاص: در بعضی کشورها، مالیات بر ارسال تنظیم شده است. اگر این تنظیمات با تنظیمات منطقه تداخل کند، ممکن است روش غیرفعال شود. ترتیب دقیق در مدیریت مالیات در ووکامرس آمده است.

روش تشخیص: در افزونه چندزبانه، بررسی کنید که تنظیمات ارسال در کدام زبان‌ها انتشار یافته. سپس با یک کاربر تست، در هر زبان، فهرست روش‌ها را ببینید.

هوک‌های مرتبط و ترتیب اجرا

در لایه کد، نمایش روش‌های ارسال با چند هوک کلیدی مدیریت می‌شود. اگر با کد سفارشی کار می‌کنید، شناختن این هوک‌ها ضروری است:

  1. woocommerce_shipping_packages: فیلتر اصلی که بسته‌های ارسال را در لحظه محاسبه آماده می‌کند.
  2. woocommerce_package_rates: فیلتر نرخ‌های ارسال. اگر می‌خواهید روشی را حذف یا اضافه کنید، اینجا نقطه درست است.
  3. woocommerce_shipping_methods: فیلتر فهرست روش‌های ثبت‌شده. اگر افزونه‌ای این فهرست را تغییر داده باشد، ریشه خطا اینجاست.
  4. woocommerce_checkout_update_order_review: اکشن بعد از تغییر سبد در صفحه پرداخت. اگر اجرا نشود، فهرست روش‌ها به‌روزرسانی نمی‌شود.

نکته‌ای که اکثر توسعه‌دهنده‌ها نادیده می‌گیرند: اگر از woocommerce_package_rates برای فیلتر روش‌ها استفاده می‌کنید، همیشه با یک آرایه خالی شروع کنید نه با نرخ‌های قبلی، در غیر این صورت نرخ‌های قدیمی و جدید قاطی می‌شوند. برای درک مفاهیم پایه هوک‌ها، هوک‌های ووکامرس و هوک‌های وردپرس را ببینید.

پروتکل عیب‌یابی گام‌به‌گام

حالا ترتیب عملی عیب‌یابی، از سریع‌ترین به دقیق‌ترین:

  1. بازتولید روی استجینگ: قبل از هر چیز، خطا را در محیطی جدا از سایت زنده بازتولید کنید. روش راه‌اندازی در بکاپ گرفتن از فروشگاه ووکامرس آمده است.
  2. بررسی مناطق و روش‌ها: در پیشخوان ووکامرس، همه مناطق ارسال و روش‌های فعال داخل هرکدام را ببینید.
  3. تست با نشانی‌های مختلف: در سبد تست، نشانی از هر استان وارد کنید و ببینید کدام روش فعال می‌شود.
  4. کنسول مرورگر: تب Console را باز کنید و خطاهای JavaScript را ببینید. سپس در تب Network، پاسخ wc-ajax=update_order_review را بررسی کنید.
  5. فعال‌سازی لاگ ووکامرس: در WooCommerce → Status → Logs، ردیف‌های مربوط به ارسال را ببینید. روش دقیق در پیدا کردن خطاهای ووکامرس در لاگ‌ها آمده است.
  6. فعال‌سازی WP_DEBUG_LOG: خطاهای PHP که مربوط به محاسبه ارسال هستند را در debug.log ببینید.
  7. پاک کردن کامل کش: کش افزونه، آبجکت، CDN و مرورگر.
  8. غیرفعال‌سازی افزونه‌های جانبی: با روش نصف‌سازی، مقصر را پیدا کنید.
  9. تغییر موقت قالب به Twenty Twenty: اگر خطا رفع شد، ریشه در قالب است.

اگر خطا در ساعات اوج رخ می‌دهد و نه همیشه، به لایه منابع هاست هم شک کنید. مسئله عملکرد در افزایش سرعت فروشگاه ووکامرس باز شده است. برای خطاهای پرتکرار، رفع خطاهای رایج ووکامرس و عیب‌یابی خطاهای ووکامرس نقطه شروع سریعی هستند.

در عیب‌یابی نمایش روش ارسال، زنجیره را باید از پایین به بالا اجرا کنید: اول ببینید آیا منطقه منطبق است، سپس روش واجد شرایط، و در آخر لایه محیط. هر پرش از یک مرحله، احتمال خطای اشتباه را بالا می‌برد.

اشتباهات پرهزینه در تشخیص

در پرونده‌های پشتیبانی که بازبینی کرده‌ام، این پنج اشتباه بیشتر از بقیه تکرار می‌شود:

  • تغییر همزمان چند پارامتر: منطقه، روش، کلاس و افزونه را همزمان تغییر می‌دهید و بعد نمی‌دانید کدام مؤثر بوده. یک تغییر، یک تست.
  • عیب‌یابی روی سایت زنده: غیرفعال کردن افزونه ارسال در ساعت شلوغ، می‌تواند به معنی زیان مالی مستقیم باشد.
  • نادیده گرفتن سبد مختلط: سبد تک‌محصولی کار می‌کند اما سبد چندمحصولی خطا دارد. همیشه با سبد مختلط تست کنید.
  • اعتماد به پیام ظاهری: نبود پیام خطا به‌معنی سالم بودن همه لایه‌ها نیست. فهرست خالی، خودش یک پیام خطاست.
  • بی‌توجهی به کلاس ارسال: اگر محصولات شما کلاس ارسال ندارند و روش شما بر اساس کلاس کار می‌کند، فهرست روش‌ها همیشه خالی می‌ماند.

پرسش‌های پرتکرار درباره عدم نمایش روش ارسال

چرا هیچ روش ارسالی در ووکامرس نمایش داده نمی‌شود؟ سه ریشه اصلی: نبود منطقه منطبق با نشانی کاربر، نداشتن روش فعال داخل منطقه، یا نبود شرط واجد‌بودن در سبد. ابتدا مناطق را بررسی کنید، سپس شرط‌های روش‌ها را.

چرا برای بعضی استان‌ها روش ارسال ظاهر می‌شود و برای بعضی نه؟ ریشه در پوشش ناقص مناطق ارسال است. برای هر استان یا یک منطقه سراسری داشته باشید یا محدوده منطقه را گسترش دهید.

چرا پس از تغییر نشانی، روش ارسال ناپدید می‌شود؟ این نشانه شکست AJAX یا کش صفحه پرداخت است. کنسول مرورگر را باز کنید و پاسخ wc-ajax=update_order_review را بررسی کنید.

آیا افزونه‌های ارسال پویا می‌توانند باعث عدم نمایش شوند؟ بله. اگر API سرویس داخلی خطا بدهد یا کند پاسخ دهد، افزونه ممکن است به‌جای نمایش پیام خطا، فهرست روش‌ها را خالی برگرداند.

چرا روش ارسال در سبد تک‌محصولی کار می‌کند اما در سبد چندمحصولی نه؟ ریشه معمولاً در Shipping Class یا محدودیت محصولات است. اگر سبد شامل چند کلاس مختلف باشد، بعضی روش‌ها برای ترکیب خاصی فعال نمی‌شوند.

چرا روش ارسال در موبایل نمایش داده نمی‌شود اما در دسکتاپ می‌شود؟ ریشه در قالب یا افزونه‌ای است که رویداد AJAX را در موبایل به‌درستی فراخوانی نمی‌کند. تفاوت رفتار را در Network مرورگر مقایسه کنید.

چرا بعد از افزودن یک محصول به سبد، فهرست روش‌ها خالی می‌شود؟ اگر محصول وزن ندارد و روش ارسال بر اساس وزن است، فرمول ممکن است به‌جای خطا، فهرست را خالی برگرداند. وزن و ابعاد محصولات را تکمیل کنید.

چرا روش ارسال فقط برای کاربران لاگین نمایش داده می‌شود؟ بعضی روش‌ها می‌توانند به وضعیت کاربر وابسته باشند. اگر شرطی به نقش کاربر تنظیم شده باشد، کاربر مهمان آن را نمی‌بیند.

از تشخیص تا پیشگیری

عدم نمایش روش ارسال در ووکامرس، در ظاهر یک مسئله کوچک است؛ در عمل، ترکیبی از چند لایه که یکی از آن‌ها بی‌صدا نتیجه را خالی کرده. سه اصل که از این مسیر با من می‌ماند:

  1. یک منطقه سراسری همیشه داشته باشید: بهترین عادت برای پیشگیری از خطاهای «فهرست خالی»، تعریف یک منطقه Rest of the World با روش پیش‌فرض است. این منطقه، شبکه امنیتی شماست.
  2. روز کمپین، فهرست روش‌ها را پایش کنید: یک اسکریپت کوچک یا افزونه پایش داشته باشید که هر ساعت یک تست ساختگی انجام دهد و اگر فهرست روش‌ها خالی بود، به شما اطلاع دهد.
  3. مستندسازی دقیق مناطق و روش‌ها: برای هر منطقه، یک برگه کوچک بسازید که روش‌های فعال، شرایط و محدودیت‌ها را ثبت کند. این سند، ارزش ساعات عیب‌یابی آینده را دارد.

اگر در پروژه‌ای با مشکل مشابه دست‌وپنجه نرم کرده‌اید، برای من جالب است بدانم کدام لایه بیشترین وقت شما را گرفت: تطبیق نشانی، شرط واجد‌بودن، API خارجی یا لایه کش. تجربه‌تان را در دیدگاه‌ها بنویسید؛ به‌خصوص اگر نشانه‌ای کشف کرده‌اید که در این فهرست نبوده. همین نشانه‌ها، دقیق‌ترین راهنمای نفر بعدی‌اند. 📦