Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/alireza10up/wordpress-plugin-supplier-discount/archive/refs/heads/develop.zipNo built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.
Supplier 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+