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

پیش نیازها و اصول طراحی
پیش نیازهای فنی
- وردپرس و ووکامرس نصب شده و فعال
- دسترسی به فایل functions.php قالب فرزند یا پلاگین اختصاصی برای قرار دادن کد
- دانش پایه از هوک های وردپرس و ووکامرس و توابع کار با متا کاربر
اصول طراحی سیستم
- سادگی: ذخیره امتیاز در user meta برای دستیابی سریع
- امنیت: اعتبارسنجی مقادیر ورود و جلوگیری از دستکاری کلاینت
- قابلیت توسعه: استفاده از هوک ها تا بعدا امکان افزودن ویژگی های جدید مثل لاگ امتیاز یا قوانین پیچیده وجود داشته باشد
- تطابق با کارایی: جلوگیری از کوئری های اضافی در هر بار لود صفحه با کشینگ و استفاده از متا کاربر

گام به گام: پیاده سازی اصلی
۱. تعریف نحوه امتیازدهی
ابتدا تعیین کنید که چه عملیاتی امتیاز می گیرند. برای مثال:
- تکمیل سفارش: امتیاز بر اساس مبلغ سفارش
- ثبت نظر یا اشتراک در خبرنامه: امتیاز ثابت
- ورود روزانه یا مشاهده محصول: امتیاز کم برای انگیزش
۲. ذخیره امتیاز در پروفایل کاربر
ساده ترین روش استفاده از user meta است. مثال کد زیر را در فایل functions.php قالب فرزند یا پلاگین اختصاصی قرار دهید. این نمونه برای افزودن امتیاز پس از تکمیل سفارش است.
get_user_id(); if ( ! $user_id ) return; // محاسبه امتیاز : به ازای هر 10000 تومان یک امتیاز مثال $total = floatval( $order->get_total() ); $points = floor( $total / 10000 ); if ( $points current_time( 'mysql' ), 'type' => 'order_completed', 'points' => $points, 'order_id' => $order_id ); update_user_meta( $user_id, 'custom_points_log', $logs );}?>
۳. نمایش امتیاز در پنل کاربر
برای نمایش امتیاز در صفحه حساب کاربری از یک شورتکد یا هوک ووکامرس استفاده کنید:
<?phpadd_shortcode ( 'show_user_points', 'custom_show_user_points' );function custom_show_user_points() { if ( ! is_user_logged_in() ) return 'برای مشاهده امتیاز وارد شوید.'; $user_id = get_current_user_id(); $points = intval( get_user_meta( $user_id, 'custom_points', true ) ); return '
امتیاز فعلی شما: '.esc_html( $points ).'
';}?>
۴. امکان استفاده از امتیاز برای تخفیف در پرداخت
برای اعمال تخفیف از امتیاز کاربر می توانید هنگام محاسبه کارمزد سبد خرید، یک هزینه منفی اضافه کنید. مثال زیر مقدار هر امتیاز را برابر 1000 تومان فرض می کند و کاربر می تواند حداکثر تا نیمی از سبد با امتیاز تسویه کند.
<?phpadd_action ( 'woocommerce_cart_calculate_fees', 'custom_apply_points_discount' );function custom_apply_points_discount( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; if ( ! is_user_logged_in() ) return; $user_id = get_current_user_id(); $points = intval( get_user_meta( $user_id, 'custom_points', true ) ); if ( $points get_subtotal() * 0.5; // حداکثر 50 درصد $discount = min( $points * $point_value, $max_discount ); if ( $discount > 0 ) { $cart->add_fee( 'تخفیف با امتیاز', - $discount ); // ذخیره مقدار استفاده شده برای بعدا کم کردن از کاربر در هنگام پرداخت موفق WC()->session->set( 'custom_points_used', floor( $discount / $point_value ) ); }}?>
۵. کم کردن امتیاز پس از پرداخت موفق
اگر از تخفیف استفاده شده باید امتیاز از حساب کاربر کم شود؛ این کار را هنگام تغییر وضعیت سفارش به پرداخت شده انجام دهید.
get_user_id(); if ( ! $user_id ) return; $points_used = WC()->session->get( 'custom_points_used' ); if ( ! $points_used ) return; $current = intval( get_user_meta( $user_id, 'custom_points', true ) ); $new = max( 0, $current - $points_used ); update_user_meta( $user_id, 'custom_points', $new ); // پاکسازی سشن WC()->session->__unset( 'custom_points_used' );}?>
بهینه سازی، امنیت و توسعه پذیری
امنیت و اعتبارسنجی
- هر ورودی را قبل از ذخیره اعتبارسنجی کنید.
- از توانایی کاربر در تغییر مقادیر در سمت کلاینت جلوگیری کنید؛ فقط سرور مقادیر معتبر را قبول کند.
- در عملیات مالی مثل تخفیف امتیاز از هوک های ووکامرس استفاده کنید تا رفتار با پرداخت ها هماهنگ باشد.
بهینه سازی عملکرد
- از متا کاربر استفاده کنید و از کوئری های سنگین در هدر سایت خودداری کنید.
- اگر نیاز به گزارش های پیچیده دارید، یک جدول اختصاصی در دیتابیس بسازید تا خواندن و نوشتن سریع تر شود.
قابلیت توسعه
می توانید امکانات بیشتری اضافه کنید مثل:
- سیستم لاگ پیشرفته امتیازها با امکان بازگشت تراکنش
- قوانین امتیازدهی سفارشی در پنل مدیریت با Settings API
- اتصال به ایمیل مارکتینگ برای اهدا امتیاز در کمپین ها
- نمایش تاریخچه امتیازها در داشبورد کاربر
نمونه های مرتبط و ایده های جذاب
گیمیفیکیشن و افزایش تعامل
ترکیب سیستم امتیاز با المان های گیمیفیکیشن مثل نشان ها، سطح کاربری و لیدربورد می تواند انگیزه کاربران را بالا ببرد. همچنین امتیاز را می توانید برای بازخورد های اجتماعی مثل اشتراک گذاری محصول یا معرفی دوستان اختصاص دهید.
ادغام با سیستم عضویت و نقش ها
می توانید امتیازها را به ارتقای نقش های کاربری یا دسترسی به محتوای ویژه مرتبط کنید. برای مثال نقش های طلایی با نیاز به حداقل امتیاز برای خریدهای خاص یا دسترسی به تخفیف های انحصاری.
نتیجه گیری
ساخت یک سیستم امتیازدهی اختصاصی در ووکامرس بدون افزونه کاملا ممکن است و مزایای زیادی از جمله کنترل کامل، بهینه سازی عملکرد و امکان توسعه ویژه برای نیازهای کسب و کار فراهم می کند. با رعایت اصول امنیت، اعتبارسنجی و طراحی قابل توسعه می توانید یک سیستم حرفه ای و کم هزینه راه اندازی کنید. نمونه کدهای ارائه شده نقطه شروع خوبی هستند و می توان آن ها را با توجه به نیاز توسعه داد.
پیشنهاد می کنم قبل از قرار دادن در سایت زنده، کدها را در محیط توسعه تست کنید و برای موارد حساس مثل محاسبه تخفیف و کم کردن امتیاز لاگ کامل داشته باشید تا در صورت بروز خطا امکان بازگشت وجود داشته باشد.
آیا می خواهید نسخه ای از این سیستم را طوری تغییر دهیم که امتیازها بر اساس رفتار های خاص مثل مشاهده محصولات یا ارسال سوال در صفحه محصول تعلق بگیرد؟ اگر بله، کدام رفتار را اولویت می دهید تا نمونه کد آن را برایتان آماده کنم؟