كيف تواجه أشهر مشاكل “ووكومرس” الناتجة عن أخطاء العملاء؟

يعتبر “ووكومرس” (WooCommerce) الخيار الأول عالمياً لبناء المتاجر الإلكترونية، لكن القوة تأتي مع التحديات. في كثير من الأحيان، لا تنبع مشاكل المتجر من أخطاء في البرمجة، بل من سلوكيات العملاء—سواء كانت مقصودة أو غير مقصودة.

في هذا الدليل، سنستعرض 5 مشاكل تقنية شائعة يواجهها أصحاب المتاجر وكيفية حلها بذكاء باستخدام إعدادات النظام، الإضافات، أو الأكواد البسيطة.

1. معضلة “حجز المخزون” والطلبات المعلقة

يعاني الكثير من أصحاب المتاجر من نفاد المخزون “وهمياً” بسبب عملاء يضيفون المنتجات للسلة ويصلون لصفحة الدفع ثم يغادرون. ووكومرس يقوم بحجز هذه الكمية تلقائياً، مما يمنع المشترين الجادين من إتمام الشراء.

الحل التقني: لا تحتاج لإضافات هنا؛ الحل في إعدادات ووكومرس الافتراضية:

  • توجه إلى WooCommerce > الإعدادات > المنتجات > المخزون.

  • ابحث عن خيار “احتجاز المخزون (بالدقائق)”.

  • قم بتغيير القيمة إلى 15 أو 30 دقيقة (خاصة في أوقات العروض)، ليقوم النظام بإلغاء الحجز تلقائياً إذا لم يتم الدفع.

2. خطر الطلبات الوهمية في “الدفع عند الاستلام”

تعتبر ميزة “الدفع عند الاستلام” سلاحاً ذو حدين، حيث يسهل على العابثين أو “البوتات” إغراق متجرك بطلبات وهمية تكبدك تكاليف شحن بلا طائل.

الحل التقني: أفضل وسيلة هي تفعيل “التحقق بخطوتين” عبر البريد أو الهاتف.

  • استخدم إضافة مثل miniOrange OTP Verification

  • هذه الإضافة تجبر العميل على إدخال رمز تحقق (OTP) يصل لبريده قبل إتمام الطلب، مما يضمن وجود شخص حقيقي خلف الشاشة.

بعد تنزيل الاضافة وتفعيلها أنتقل إلى WC Notifications ثم Forms ثم أفعل خيار WooCommerce Checkout Form وأختار Email Verification.

 

 

وبهذا يظهر زر Send OTP أسفل حقل البريد الإلكتروني في صفحة الدفع، وعند النقر عليه تظهر رسالة توضح أنه تم إرسال رمز إلى البريد الإلكتروني، حيث يجب على العميل أن يدخل الرمز الذي وصله في حقل Enter OTP الذي يظهر بعد إرسال الرمز.

3. التلاعب بالكميات والطلبات الضخمة

قد يقوم المنافسون أحياناً بحجز كامل مخزونك في طلب واحد لتعطيل مبيعاتك.

الحل التقني: يمكنك وضع حد أقصى للقطع المسموح بها في الطلب الواحد عبر إضافة كود برمجى بسيط (Snippet) يحدد السقف الأعلى للشراء، مثلاً 5 قطع فقط لكل منتج. هذا يضمن توزيع المخزون على أكبر عدد من العملاء الحقيقيين.

// 1. تحديد الحد الأقصى في حقل الإدخال (شكلياً)

add_filter( 'woocommerce_quantity_input_args', 'limit_input_args', 10, 2 );

function limit_input_args( $args, $product ) {

    $args['max_value'] = 5; 

    return $args;

}

// 2. التحقق الفعلي عند محاولة الإضافة للسلة (برمجياً)

add_filter( 'woocommerce_add_to_cart_validation', 'validate_max_qty', 10, 3 );

function validate_max_qty( $passed, $product_id, $quantity ) {

    $max_allowed = 5; // الحد الأقصى المسموح به

    $already_in_cart = 0;

    // فحص السلة لمعرفة هل المنتج موجود مسبقاً وكم عدده

    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {

        if ( $values['product_id'] == $product_id ) {

            $already_in_cart = $values['quantity'];

            break;

        }

    }

    // المعادلة: الكمية في السلة + الكمية الجديدة

    if ( ( $already_in_cart + $quantity ) > $max_allowed ) {

        // رسالة الخطأ التي ستظهر للعميل

        wc_add_notice( 'عذراً، الحد الأقصى المسموح به لهذا المنتج هو ' . $max_allowed . ' قطع فقط. لديك بالفعل ' . $already_in_cart . ' في السلة.', 'error' );

        return false; // إلغاء العملية

    }

    return $passed;

}

// 3. التحقق عند تحديث الكمية داخل صفحة السلة نفسها

add_filter( 'woocommerce_update_cart_validation', 'validate_cart_update_qty', 10, 4 ); 

function validate_cart_update_qty( $passed, $cart_item_key, $values, $quantity ) {

    $max_allowed = 5;

    if ( $quantity > $max_allowed ) {

        wc_add_notice( 'عذراً، لا يمكنك شراء أكثر من ' . $max_allowed . ' قطع من هذا المنتج.', 'error' );

        return false;

    }

    return $passed;

}

 

4. بطء المتجر بسبب تراجم الطلبات الملغاة

مع مرور الوقت، تتراكم آلاف الطلبات “الفاشلة” أو “الملغاة” في قاعدة البيانات، مما يسبب ثقلاً ملحوظاً في لوحة التحكم.

الحل التقني:

استخدم إضافة Prune WooCommerce Orders. تتيح لك هذه الأداة تنظيف قاعدة البيانات من الطلبات غير الضرورية بضغطة زر واحدة، مما يعيد للمتجر سرعته المعهودة.

5. الخسارة في “الطلبات الصغيرة” جداً

أحياناً تكون تكلفة التغليف والتشغيل أعلى من ربح المنتج نفسه إذا كان رخيصاً جداً.

الحل التقني:

فرض “حد أدنى لقيمة الطلب”. يمكنك إضافة كود برمجي يمنع العميل من الانتقال لصفحة الدفع إذا كان مجموع السلة أقل من قيمة معينة (مثلاً 50 ريالاً)، مع إظهار رسالة تنبيهية تشرح السبب.

// 1. التحقق عند الضغط على زر إتمام الطلب في صفحة الدفع

add_action( 'woocommerce_checkout_process', 'custom_min_order_check' );

// 2. التحقق أيضاً في صفحة السلة (قبل الذهاب للدفع)

add_action( 'woocommerce_check_cart_items', 'custom_min_order_check' );

function custom_min_order_check() {

    // تحديد الحد الأدنى

    $minimum = 50;

    // استخدام get_cart_contents_total() للحصول على مجموع السلة الفعلي (بعد الخصومات)

    // إذا كنت تريد المجموع النهائي مع الشحن استخدم WC()->cart->total

    if ( WC()->cart->get_cart_contents_total() < $minimum ) {

        if ( is_cart() ) {

            // رسالة تظهر في صفحة السلة

            wc_print_notice( 

                sprintf( 'عذرًا، الحد الأدنى للطلب هو %s ريالًا. مجموع طلبك الحالي هو %s', $minimum, WC()->cart->get_cart_contents_total() ), 

                'error' 

            );

        } else {

            // رسالة تظهر في صفحة الدفع وتوقف العملية

            wc_add_notice( 

                sprintf( 'عذرًا، الحد الأدنى للطلب هو %s ريالًا. مجموع طلبك الحالي هو %s', $minimum, WC()->cart->get_cart_contents_total() ), 

                'error' 

            );

        }

    }

}