Amirali Yaghoutiمهندس ارشد نرم‌افزار

مطالعه موردی مهندسی

A2 جزئیات Woo و Excel

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

مسئله تجاری

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

آنچه تحویل دادم

  • a2-woo-details-exel.php، یک افزونه‌ی MU ۲۱۶۸ خطی که به‌جای نوشتن هشت ردیف postmeta برای هر سفارش، جدول خودش را می‌سازد.
  • هشت ستون عملیاتی مستقیم در فهرست سفارش‌ها، با عرض‌های تنظیم‌شده تا فیلدهای چک‌باکسی مثل یک جدول قابل مرور دیده شوند.
  • یک ویرایشگر مودال که از ردیف سفارش باز می‌شود، با انتخابگر تاریخ جلالی برای تاریخ ارسال چون تیم با همان تقویم کار می‌کند.
  • یک فهرست مدیریت‌شده‌ی محل انبار که در یک آپشن ذخیره و از داخل مودال ویرایش می‌شود، تا محل‌ها دراپ‌داون باشند نه متن آزادی که هر بار جور دیگری نوشته می‌شود.
  • خروجی XLSX روی فیلتر جاری، تا یک بازه‌ی تاریخ یا انتخاب وضعیت در ادمین تبدیل به فایلی شود که تیم حسابداری بتواند استفاده کند.
  • یک یادداشت سفارش که ثبت می‌کند کدام کاربر چه تغییری را ذخیره کرده، تا این فیلدها هم همان‌قدر پاسخ‌گو باشند که بقیه‌ی تاریخچه‌ی سفارش.
  • پشتیبانی هم‌زمان از صفحه‌ی قدیمی مبتنی بر پست و از HPOS، چون این دو هوک‌های ستون کاملاً متفاوتی دارند.

رویکرد فنی

  • جدول اختصاصی همان تصمیمی است که بقیه از آن درمی‌آید. ستون‌ها با یک خواندن در هر صفحه رندر می‌شوند، نه هشت جست‌وجوی postmeta در هر ردیف، و خروجی گرفتن به‌جای یک حلقه می‌شود یک کوئری.
  • تغییر اسکیما نسخه‌دار است و به‌جای هر بار بارگذاری ادمین، حداکثر هر شش ساعت بررسی می‌شود؛ تا خود بررسی نصب سربار نشود.
  • هر نوشتن از اندپوینت AJAX محافظت‌شده با nonce رد می‌شود؛ هیچ مسیر ارسال فرمی نمانده که بشود دوباره پخشش کرد.
  • هر دو هوک ستون با اولویت ۹۹۹۹ ثبت می‌شوند تا فیلدها بعد از هر کاری که قالب و افزونه‌های دیگر با آن جدول کرده‌اند اضافه شوند.
  • خروجی گرفتن پشت یک overlay با وضعیت پیشرفت خودش اجرا می‌شود، چون یک بازه‌ی بزرگ آن‌قدر کند است که انتظار بی‌صدا به‌نظر می‌رسد دکمه خراب شده.

نتیجه و شواهد

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

اهمیت برای کارفرما

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

خلاصه-اجرایی-پروژه

خلاصه اجرایی خوانا

خلاصه_اجرایی {
  پروژه: "A2 Woo Details Excel"
  فایل: "mu-plugins/a2-woo-details-exel.php (۲۱۶۸ خط، v2.0.0)"
  ذخیره‌سازی: "جدول اختصاصی {prefix}a2_order_ops، نه postmeta"
  فیلدها: "فاکتور خارجی، جعبه، پاکت، گارانتی، باطری،
           موقعیت انبار، تاریخ ارسال جلالی، کد رهگیری"
  رابط: "ویرایشگر مودال از ردیف سفارش + ۸ ستون فهرست"
  سازگاری: "صفحه‌ی shop_order قدیمی و HPOS، هر دو با ۹۹۹۹"
  خروجی: "XLSX روی فیلتر جاری ادمین"
  ممیزی: "یادداشت سفارش با نام کاربر ذخیره‌کننده"
  اسکیما: "نسخه‌دار، حداکثر هر ۶ ساعت بررسی"
}

ارزش حرفه‌ای این پروژه

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

پشتیبانی هم‌زمان از صفحه‌ی قدیمی و HPOS کار جذابی نیست، اما حالت دیگرش افزونه‌ای است که با یک تغییر تنظیمات ووکامرس می‌شکند؛ تغییری که هیچ‌کس یادش نیست کِی انجام شده.