خصم سلة ووكوميرس حسب دور المستخدم وكيفية حله
عند العمل مع WooCommerce، قد يواجه المستخدمون أحيانًا مشكلات تتعلق بتطبيق خصومات على سلة المشتريات بناءً على دور المستخدم. تعتبر هذه القضية ضرورية لضمان تقديم تجربة تسوق سلسة وعادلة لجميع العملاء. إذا كان لديك موقع للتجارة الإلكترونية يعتمد على WooCommerce، ففهم كيفية إدارة الخصومات حسب دور المستخدم يعد أمرًا أساسيًا. في هذا المقال، سوف نستعرض كيف يمكن معالجة مشكلة خصومات سلة WooCommerce بناءً على أدوار المستخدم بشكل فعال.
تفعيل التسجيل في صفحة الدفع
أول خطوة أهمية هي التأكد من أن التسجيل مفعل في صفحة الدفع، حيث يساعد ذلك في تجنب مشكلات مماثلة تتعلق بصلاحيات المستخدمين. تسجيل المستخدمين يمكن أن يسهل تخصيص التجربة وتحقيق الفروقات بين أدوار العملاء المختلفين.
تحليل الشيفرة المصدرية
قد تحتوي الشيفرة الأصلية المستخدمة على بعض الأخطاء والتعقيدات. يجب استبدال الشيفرة الحالية بشيفرة محسنة يمكن أن تساعد في تطبيق الخصومات بشكل فعال. إليك كيف يمكنك استخدام فلتر لإضافة بيانات مخصصة إلى عناصر السلة:
add_filter( 'woocommerce_add_cart_item_data', 'add_discounted_price_as_custom_cart_item_data', 20, 3 );
function add_discounted_price_as_custom_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
global $current_user;
if ( !$current_user ) {
return;
}
$product = wc_get_product($variation_id > 0 ? $variation_id : $product_id);
if ( ! $product->is_on_sale() ) {
return;
}
$page = jet_engine()->options_pages->registered_pages['shop-opt'];
$discount_for_role = array(
'discount1' => $page->get('diskont-riven-1'),
'discount2' => $page->get('diskont-riven-2'),
'discount3' => $page->get('diskont-riven-3'),
);
$discount_percentage = 0;
foreach ( $discount_for_role as $user_role => $option_percentage ) {
if ( wc_current_user_has_role($user_role) ) {
$discount_percentage = (float) $option_percentage;
break;
}
}
$price = (float) $product->get_price();
if ( $discount_percentage > 0 && $price > 0 ) {
$cart_item_data['base_price'] = $price;
$cart_item_data['percentage'] = $discount_percentage;
$cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;
}
return $cart_item_data;
}
تساعد هذه الشيفرة في إضافة خصم إلى سعر المنتج بناءً على دور المستخدم، مما يعزز من فعالية سلة المشتريات وإمكانية تخصيص الأسعار للعملاء.
عرض خصم المستخدم
يمكن عرض قيمة الخصم بإضافة قيمة الخصم إلى اسم المنتج في السلة. يمكنك استخدام الفلتر التالي:
add_filter( 'woocommerce_cart_item_name', 'append_discount_percentage_to_cart_item_name', 20, 3 );
function append_discount_percentage_to_cart_item_name($product_name, $cart_item, $cart_item_key) {
if (is_user_logged_in() && isset($cart_item['percentage']) ) {
$product_name .= ' (' . $cart_item['percentage'] . '% discount)';
}
return $product_name;
}
هذا الكود يساعد في تنبيه العميل بأن هناك خصمًا مخصصًا تم تطبيقه على المنتج مما يعزز من الشفافية والوضوح.
تطبيق الخصومات في سلة الشراء
لضمان تطبيق الخصومات على سعر السلة بناءً على دور المستخدم، يجب استخدام الأكشن التالي:
add_action( 'woocommerce_before_calculate_totals', 'custom_discounted_cart_item_price', 20 );
function custom_discounted_cart_item_price( $cart ) {
if ( !is_user_logged_in() ) {
return;
}
if ( is_admin() && ! defined('DOING_AJAX') ) {
return;
}
if (did_action('woocommerce_before_calculate_totals') >= 2) {
return;
}
foreach ($cart->get_cart() as $item) {
if ( isset($item['new_price']) ) {
$item['data']->set_price($item['new_price']);
}
}
}
تعمل هذه الشيفرة على التحقق مما إذا كان المستخدم لديه خصم فيتم تطبيق السعر الجديد عليه.
تحديث أدوار المستخدمين بعد الشراء
بعد إكمال عملية الشراء، قد تحتاج إلى تعديل دور المستخدم، يمكنك استخدام الكود التالي للقيام بذلك:
add_action( 'woocommerce_order_status_completed', 'define_discount_user_role_on_order_completed', 10, 2 );
function define_discount_user_role_on_order_completed( $order_id, $order ) {
if ( !$order->get_user_id() ) {
return;
}
$discount_roles = array( 'discount1', 'discount2', 'discount3' );
$user = $order->get_user();
if ( wc_user_has_role( $order->get_user(), end($discount_roles) ) ) {
return;
}
if ( ! array_intersect( $discount_roles, $user->roles) ) {
$user->add_role( reset($discount_roles) );
}
else {
foreach ( $discount_roles as $key => $role ) {
if ( wc_user_has_role( $order->get_user(), $role ) ) {
$user->remove_role( $role );
$user->add_role( $discount_roles[$key+1] );
break;
}
}
}
}
يساعد هذا الكود في إدارة أدوار المستخدمين بطريقة هيكلية ومرتبة، مما يسمح بتقديم خصومات متتالية بناءً على تفاعل المستخدم مع الموقع.
نصائح هامة عند التعامل مع أدوار المستخدمين
من المهم عدم إزالة دور "العميل" لأنه ضروري لووكوميرس. من الأفضل إضافة أدوار الخصم كأدوار إضافية بدلاً من تغيير دور العميل.
ختامًا، تعتبر معالجة خصومات سلة WooCommerce بناءً على دور المستخدم قضية شائعة تتطلب اهتمامًا خاصًا. من خلال الشيفرات التوضيحية والحلول المقترحة، يمكنك تحسين تجربة المستخدم والاستفادة من الخصومات بطريقة مريحة وعادلة.