یک فروشگاه لوازم خانگی را به یاد می‌آورم که در اوج کمپین فروش، بیست‌وشش سفارش برای محصولی ثبت شد که فقط چهار عدد در انبار داشت. همه‌شان با تیک out of stock بسته شدند، اما مشتری‌ها تا هفته‌ها ایمیل می‌زدند و صبر می‌کردند. علت ریشه‌ای نه هک بود نه باگ؛ یک تنظیم اشتباه در مدیریت موجودی بود. این مقاله، همان چیزی است که بعد از آن ماجرا تبدیل به پروتکل کاری من شد. اگر تازه با ووکامرس آشنا می‌شوید، ابتدا راهنمای ساخت فروشگاه با ووکامرس را مرور کنید.

مدل ذهنی درست از موجودی در ووکامرس

در ووکامرس، موجودی یک عدد در دیتابیس نیست؛ مجموعه‌ای از وضعیت‌هاست. برای هر محصول سه چیز جدا ذخیره می‌شود: مقدار عددی (stock quantity)، وضعیت موجود بودن (stock status) و سیاست هر سفارش (backorders). اشتباه شایع این است که مدیر فروشگاه موجودی را صفر می‌کند و انتظار دارد محصول خودکار ناموجود شود. این اتفاق نمی‌افتد مگر Manage stock فعال باشد و مقدار با آستانه out of stock تطبیق داده شود.

سه وضعیت اصلی برای هر محصول داریم. In stock یعنی موجود است و می‌تواند فروخته شود. Out of stock یعنی اکنون نیست و دکمه افزودن به سبد پنهان می‌شود. On backorder یعنی فعلاً نیست اما قابل سفارش است و در آینده ارسال می‌شود. تصمیم بین این سه، بیشتر از تنظیمات فنی، یک تصمیم تجاری است. برای فروشگاهی که محصولات چاپی یا سفارشی می‌فروشد، backorder یک انتخاب هوشمندانه است؛ برای فروشگاهی که فقط موجودی انبار خود را می‌فروشد، backorder باید خاموش بماند.

موجودی، قلب فروشگاه است. اگر عدد آن دقیق نباشد، هر تصمیم دیگر روی بستر لرزان بنا شده است.

سه سطح تنظیم stock که باید بلد باشید

تنظیمات موجودی در سه سطح پخش شده‌اند و هر سطح رفتار متفاوتی دارد:

  • سطح کل فروشگاه: در WooCommerce → Settings → Products → Inventory. اینجا تصمیم می‌گیرید که به صورت پیش‌فرض موجودی مدیریت شود یا نه، آستانه کمبود چقدر باشد، آستانه out of stock چه زمانی فعال شود و آیا نمایش موجودی به مشتری لازم است یا نه.
  • سطح محصول: در تب Inventory هر محصول. اگر مدیریت سراسری روشن باشد، اینجا می‌توانید به صورت موردی لغو یا مقدار خاص تعیین کنید.
  • سطح variation: در هر variation از یک variable product. مهم‌ترین سطحی است که اکثر کاربران نادیده می‌گیرند.

برای پروژه‌های جدی، تنظیمات پیشنهادی من چنین است: Manage stock را در سطح سراسری روشن بگذارید، Low stock threshold را روی سه بگذارید، Out of stock threshold را صفر بگذارید، Hold stock برای pending orders را روی پانزده دقیقه بگذارید. این پنج عدد، پایه یک انبار دقیق هستند. اگر فروشگاهی دارید که در آن محصولات دیجیتال هم هست، برای آن دسته، Manage stock را در سطح محصول خاموش کنید، نه در سطح سراسری.

گزارش موجودی، همیشه در سطح والد نیست. باید بفهمید که کاهش موجودی روی variation مستقل اعمال می‌شود. اگر یک variable product با چهار variation ساخته‌اید و هر variation موجودی جدا دارد، فروش یک variation فقط عدد همان variation را کم می‌کند. این در ظاهر واضح است اما در پروژه‌ها بارها دیده‌ام که مدیر انتظار داشته والد هم به‌روز شود. برای نحوه ساختاری درست variable product، به ساخت محصول متغیر در ووکامرس سر بزنید.

موجودی در variable products و مشکل تکرارشونده

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

یک راه‌حل عملی که در پروژه‌ها به کارم آمده، استفاده از افزونه‌های مدیریت انبار است که موجودی را در سطح والد نگه می‌دارند و پس از فروش، به صورت معکوس بین variation ها توزیع می‌کنند. این مدل برای فروشگاه‌هایی که کالاها را در بسته‌بندی‌های مختلف می‌فروشند (مثلاً رنگ‌های مختلف از یک پارچه) بسیار کارآمد است. برای انتخاب افزونه مناسب، فهرست بهترین افزونه‌های کاربردی ووکامرس را ببینید.

گزارش‌گیری و پایش موجودی

ووکامرس یک گزارش پایه دارد که در WooCommerce → Reports → Stock قابل دسترسی است. این گزارش سه بخش دارد: Low in stock (کم‌موجود)، Out of stock (ناموجود) و Most stock (پرموجود). اما این گزارش فقط محصولات ساده را با دقت نشان می‌دهد. برای variation ها، خروجی پراکنده است. تجربه‌ام این است که این گزارش برای فروشگاه کوچک کافی است، اما فروشگاه‌های جدی به یک سیستم انبارداری اختصاصی نیاز پیدا می‌کنند.

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

وضعیترفتار پیشنهادیابزار
موجودی کمتر از آستانهایمیل به انباردار + مخفی کردن از فروش ویژهافزونه هشدار کمبود
موجودی صفرخودکار out of stock + حفظ URLتنظیمات پیش‌فرض ووکامرس
Backorder فعالنمایش صریح زمان ارسال به مشتریپیام سفارشی در محصول
موجودی منفیبررسی فوری، احتمال خطای تراکنش یا refundگزارش API

هشدار کمبود و مدیریت نقطه سفارش

Low stock threshold یک عدد سراسری است که برای همه محصولات اعمال می‌شود. اما در واقعیت، هر محصول آستانه خاص خود را دارد. یک محصول با فروش روزانه سه عدد، آستانه‌ای متفاوت از محصولی با فروش ماهانه یک عدد دارد. ووکامرس به شما اجازه می‌دهد در تب Inventory هر محصول، Low stock threshold را بازنویسی کنید. این قابلیت را جدی بگیرید.

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

هشدار کمبود، یک ویژگی نیست؛ یک بیمه است. اگر بیمه نگیرید، ضرر از جنس اعتماد مشتری است.

خطاهای رایجی که انبار را به آشوب می‌برد

چند خطای تکرارشونده که در پروژه‌های مختلف دیده‌ام:

  • گزارش موجودی بدون فیلتر: Export گرفتن بدون فیلتر date، حجم داده را بی‌دلیل بالا می‌برد و تصمیم‌گیری را کند می‌کند.
  • عدم درنظر گرفتن سفارش‌های pending: در ساعات شلوغی، سه مشتری همزمان یک محصول را می‌خرند و موجودی کمتر از واقعیت نمایش داده می‌شود یا اورسل رخ می‌دهد.
  • فعال کردن backorder بدون اطلاع: مشتری نفهمد که باید صبر کند، و این به شکایت و refund منتهی می‌شود.
  • تعیین موجودی روی والد به امید اعمال به variation ها: این کار در ووکامرس جواب نمی‌دهد و منشأ اشتباهات آمار است.
  • نادیده گرفتن محصولات مجازی: آن‌ها هم می‌توانند موجودی محدود داشته باشند و اگر مدیریت نشوند، به فروش ناموجود منتهی می‌شوند.

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

پرسش‌های پرتکرار درباره موجودی ووکامرس

چرا بعد از فروش، موجودی محصولم کاهش پیدا نمی‌کند؟ سه احتمال رایج: Manage stock در سطح محصول غیرفعال است، سفارش در وضعیت pending بوده و هنوز موجودی کسر نشده، یا یک افزونه کش، گزارش را دیر به‌روز می‌کند.

آستانه Out of stock چه تفاوتی با Low stock دارد؟ Low stock هشدار مدیریتی است و Out of stock وضعیت فروش. اولی فقط در پنل نمایش داده می‌شود، دومی رفتار دکمه افزودن به سبد را تغییر می‌دهد.

آیا می‌توانم برای هر variation آستانه جدا داشته باشم؟ بله. هر variation می‌تواند Low stock threshold مستقل داشته باشد. این ویژگی در فروشگاه‌هایی که variation ها فروش بسیار متفاوتی دارند، تفاوت زیادی می‌سازد.

چند دقیقه موجودی یک سفارش pending رزرو می‌شود؟ به صورت پیش‌فرض ۶۰ دقیقه اما در WooCommerce → Settings → Products → Inventory قابل تنظیم است. مقدار پیشنهادی من پانزده دقیقه است تا موجودی گروگان نماند.

Backorder چه زمانی منطقی است؟ وقتی محصول ارزش انتظار دارد و مشتری آماده است صبر کند. برای محصولات ارزان و تکراری، معمولاً Backorder انتخاب بدی است.

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

درس‌های انبارداری در فروشگاه‌های واقعی

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

اگر شما هم در پروژه‌ای با اورسل یا موجودی منفی مواجه شدید، تجربه‌تان را در دیدگاه بنویسید. برای من جالب است بدانم کدام علت — pending order، خطای refund یا همگام‌سازی دیرهنگام API — بیشترین دردسر را برایتان ساخته است. 📦