WP Manifestindependent plugin directory
manifest / ecommerce / wordpress-plugin-supplier-discount

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.zip

Supplier Discount Plugin for WooCommerce

یک پلاگین حرفه‌ای WordPress که امکان اعمال تخفیف مخصوص تأمین‌کنندگان را به محصولات ووکامرس اضافه می‌کند.

ویژگی‌ها

  • ✅ فیلد درصد تخفیف برای محصولات ساده و متغیر
  • ✅ اعمال تخفیف فقط برای کاربران با نقش supplier
  • ✅ پیکربندی انعطاف‌پذیر (اعمال روی قیمت عادی یا sale)
  • ✅ دو حالت نمایش قیمت (خط‌زده یا ساده)
  • ✅ معماری OOP با PSR-4 Autoloading
  • ✅ سازگار با Composer
  • ✅ امنیت بالا و validation کامل

نصب و راه‌اندازی

پیش‌نیازها

  • WordPress 6.0 یا بالاتر
  • WooCommerce 10.0 یا بالاتر
  • PHP 8.2 یا بالاتر

نصب

  1. دانلود پلاگین:

    git clone https://github.com/alireza10up/wordpress-plugin-supplier-discount.git
  2. فعال‌سازی پلاگین:

    • فایل‌های پلاگین را در wp-content/plugins/wordpress-plugin-supplier-discount/ قرار دهید
    • از پنل مدیریت WordPress، پلاگین را فعال کنید

نحوه استفاده

1. تنظیمات پلاگین

پس از فعال‌سازی، به WooCommerce > Supplier Discount بروید و تنظیمات زیر را انجام دهید:

  • Apply on Sale Prices: آیا تخفیف روی قیمت‌های sale اعمال شود؟
  • Display Mode: نحوه نمایش قیمت (خط‌زده یا ساده)

2. افزودن فیلد تخفیف به محصولات

محصولات ساده:

  1. به Products > All Products بروید
  2. محصول مورد نظر را ویرایش کنید
  3. در تب General، فیلد Supplier Discount % را پر کنید (1-100)
  4. محصول را ذخیره کنید

محصولات متغیر:

  1. محصول متغیر را ویرایش کنید
  2. به تب Variations بروید
  3. برای هر variation، فیلد Supplier Discount % را پر کنید (1-100)
  4. تغییرات را ذخیره کنید

3. ایجاد کاربر Supplier

  1. به Users > Add New بروید
  2. نقش کاربر را Supplier انتخاب کنید
  3. اطلاعات کاربر را تکمیل و ذخیره کنید

تست پلاگین

سناریو تست 1: محصول ساده

  1. یک محصول ساده با قیمت 100,000 تومان ایجاد کنید
  2. درصد تخفیف supplier را 20% تنظیم کنید
  3. با کاربر supplier وارد شوید
  4. محصول را مشاهده کنید - باید قیمت 80,000 تومان نمایش داده شود

سناریو تست 2: محصول متغیر

  1. یک محصول متغیر با دو variation ایجاد کنید:
    • Variation 1: قیمت 50,000 تومان، تخفیف 15%
    • Variation 2: قیمت 75,000 تومان، تخفیف 25%
  2. با کاربر supplier وارد شوید
  3. هر دو variation را تست کنید

سناریو تست 3: تنظیمات مختلف

  1. حالت Strikethrough: قیمت اصلی خط‌زده + قیمت جدید
  2. حالت Simple: فقط قیمت جدید
  3. 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_price
  • woocommerce_product_variation_get_sale_price: همان مشکل sale price

معماری OOP و جداسازی Concerns

  • Plugin.php: مدیریت lifecycle و هماهنگی کلاس‌ها
  • Admin/: تمام قابلیت‌های مربوط به مدیریت
  • Frontend/: تمام قابلیت‌های مربوط به نمایش
  • Core/: قابلیت‌های اصلی (فعال‌سازی/غیرفعال‌سازی)

چرا Cache برای جلوگیری از محاسبه تکراری؟

  • مشکل: Hook ها چندبار اجرا می‌شدند و تخفیف روی تخفیف اعمال می‌شد
  • راه حل: $processed_products array برای ذخیره نتایج محاسبه شده
  • نتیجه: هر محصول فقط یکبار محاسبه می‌شود

امنیت

  • 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+