Supplier Discount for WooCommerce
A custom WordPress plugin compatible with WooCommerce that adds a "Supplier Discount Percent" field to products.
by Alireza Vahdani · github.com/alireza10up/wordpress-plugin-supplier-discount · website
★ 0stars
0forks
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/alireza10up/wordpress-plugin-supplier-discount/archive/refs/heads/develop.zipSupplier Discount Plugin for WooCommerce
یک پلاگین حرفهای WordPress که امکان اعمال تخفیف مخصوص تأمینکنندگان را به محصولات ووکامرس اضافه میکند.
ویژگیها
- ✅ فیلد درصد تخفیف برای محصولات ساده و متغیر
- ✅ اعمال تخفیف فقط برای کاربران با نقش
supplier - ✅ پیکربندی انعطافپذیر (اعمال روی قیمت عادی یا sale)
- ✅ دو حالت نمایش قیمت (خطزده یا ساده)
- ✅ معماری OOP با PSR-4 Autoloading
- ✅ سازگار با Composer
- ✅ امنیت بالا و validation کامل
نصب و راهاندازی
پیشنیازها
- WordPress 6.0 یا بالاتر
- WooCommerce 10.0 یا بالاتر
- PHP 8.2 یا بالاتر
نصب
-
دانلود پلاگین:
git clone https://github.com/alireza10up/wordpress-plugin-supplier-discount.git -
فعالسازی پلاگین:
- فایلهای پلاگین را در
wp-content/plugins/wordpress-plugin-supplier-discount/قرار دهید - از پنل مدیریت WordPress، پلاگین را فعال کنید
- فایلهای پلاگین را در
نحوه استفاده
1. تنظیمات پلاگین
پس از فعالسازی، به WooCommerce > Supplier Discount بروید و تنظیمات زیر را انجام دهید:
- Apply on Sale Prices: آیا تخفیف روی قیمتهای sale اعمال شود؟
- Display Mode: نحوه نمایش قیمت (خطزده یا ساده)
2. افزودن فیلد تخفیف به محصولات
محصولات ساده:
- به Products > All Products بروید
- محصول مورد نظر را ویرایش کنید
- در تب General، فیلد Supplier Discount % را پر کنید (1-100)
- محصول را ذخیره کنید
محصولات متغیر:
- محصول متغیر را ویرایش کنید
- به تب Variations بروید
- برای هر variation، فیلد Supplier Discount % را پر کنید (1-100)
- تغییرات را ذخیره کنید
3. ایجاد کاربر Supplier
- به Users > Add New بروید
- نقش کاربر را Supplier انتخاب کنید
- اطلاعات کاربر را تکمیل و ذخیره کنید
تست پلاگین
سناریو تست 1: محصول ساده
- یک محصول ساده با قیمت 100,000 تومان ایجاد کنید
- درصد تخفیف supplier را 20% تنظیم کنید
- با کاربر supplier وارد شوید
- محصول را مشاهده کنید - باید قیمت 80,000 تومان نمایش داده شود
سناریو تست 2: محصول متغیر
- یک محصول متغیر با دو variation ایجاد کنید:
- Variation 1: قیمت 50,000 تومان، تخفیف 15%
- Variation 2: قیمت 75,000 تومان، تخفیف 25%
- با کاربر supplier وارد شوید
- هر دو variation را تست کنید
سناریو تست 3: تنظیمات مختلف
- حالت Strikethrough: قیمت اصلی خطزده + قیمت جدید
- حالت Simple: فقط قیمت جدید
- Apply on Sale: تخفیف روی قیمت sale به جای regular
تصمیمات طراحی
چرا PSR-4 Autoloading؟
- مقیاسپذیری: امکان اضافه کردن کلاسهای جدید بدون تغییر کد
- استاندارد: پیروی از استانداردهای PHP
- عملکرد: بارگذاری خودکار کلاسها فقط در صورت نیاز
- نگهداری: کد تمیز و قابل نگهداری
چرا این Hookها انتخاب شدند؟
woocommerce_product_get_price:
- مستقیم: مستقیماً قیمت را تغییر میدهد
- جامع: در همه جا (shop، single product، cart، checkout، emails) اعمال میشود
- سازگار: با سایر پلاگینهای ووکامرس سازگار است
woocommerce_product_variation_get_price:
- مشابه: همان منطق برای محصولات متغیر
- یکپارچه: با
get_priceهماهنگ است
woocommerce_get_price_html:
- کنترل کامل: امکان کنترل نمایش HTML قیمت
- انعطاف: پشتیبانی از حالتهای مختلف نمایش
- سازگار: با قالبهای مختلف ووکامرس
woocommerce_product_options_pricing:
- منطقی: قرارگیری فیلد در کنار سایر فیلدهای قیمت
- کاربرپسند: دسترسی آسان برای کاربران
- سازگار: با رابط کاربری استاندارد ووکامرس
چرا Hookهای دیگر حذف شدند؟
woocommerce_product_get_sale_price: باعث تخفیف مضاعف میشدwoocommerce_variation_prices: پیچیدگی اضافی و تداخل باget_pricewoocommerce_product_variation_get_sale_price: همان مشکل sale price
معماری OOP و جداسازی Concerns
- Plugin.php: مدیریت lifecycle و هماهنگی کلاسها
- Admin/: تمام قابلیتهای مربوط به مدیریت
- Frontend/: تمام قابلیتهای مربوط به نمایش
- Core/: قابلیتهای اصلی (فعالسازی/غیرفعالسازی)
چرا Cache برای جلوگیری از محاسبه تکراری؟
- مشکل: Hook ها چندبار اجرا میشدند و تخفیف روی تخفیف اعمال میشد
- راه حل:
$processed_productsarray برای ذخیره نتایج محاسبه شده - نتیجه: هر محصول فقط یکبار محاسبه میشود
امنیت
- Capability Checks: بررسی دسترسی کاربران (
manage_woocommerce,supplier) - Input Sanitization: پاکسازی ورودیها (
sanitize_text_field) - Nonce Verification: تأیید امنیت فرمها
- Output Escaping: محافظت از خروجیها (
esc_html,esc_attr)
عملکرد
- شرطی: محاسبات فقط برای کاربران supplier
- Cache: استفاده از cache برای جلوگیری از محاسبات تکراری
- بهینه: حداقل تأثیر بر عملکرد سایت
سازگاری
- WooCommerce: بررسی وجود ووکامرس قبل از فعالسازی
- WordPress: سازگار با نسخههای مختلف وردپرس
- PHP: پشتیبانی از PHP 8.2+
ساختار پروژه
wordpress-plugin-supplier-discount/
├── composer.json # تنظیمات Composer
├── wordpress-plugin-supplier-discount.php # فایل اصلی پلاگین
├── src/ # کدهای اصلی (PSR-4)
│ ├── Plugin.php # کلاس اصلی پلاگین
│ ├── Admin/ # کلاسهای مدیریت
│ │ ├── ProductFields.php # مدیریت فیلدهای محصول
│ │ └── Settings.php # صفحه تنظیمات
│ ├── Frontend/ # کلاسهای فرانتاند
│ │ └── PriceModifier.php # تغییر قیمت
│ └── Core/ # کلاسهای اصلی
│ ├── Activator.php # فعالسازی
│ └── Deactivator.php # غیرفعالسازی
├── assets/ # فایلهای استاتیک
│ ├── css/admin.css # استایلهای مدیریت
│ └── js/admin.js # اسکریپتهای مدیریت
└── README.md # مستندات
تغییرات
نسخه 1.0.0
- انتشار اولیه
- فیلد تخفیف برای محصولات ساده و متغیر
- صفحه تنظیمات
- پشتیبانی از نقش supplier
- معماری OOP با PSR-4
- Validation کامل (client-side و server-side)
- پشتیبانی از PHP 8.2+