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 جذابیتی ندارد، اما جایگزینش افزونه‌ای است که با یک تغییر تنظیمات ووکامرس که هیچ‌کس یادش نمی‌آید انجام داده، می‌شکند.