سفارش همزمان فقط از یک دسته بندی در ووکامرس

S@jj@D

تازه وارد
19/12/16
45
0
6
سلام؛ اول از همه یه انتقاد کنم از فضای انجمن که برخی مواقع واقعا تاپیکهای ما تار عنکبوت میزنه توش از بس کسی جوابی نمیده و خلاصه مشکلمون حل نمیشه! ( ، ) ما میگیم شاید مشکل این چرک کف دست لامصبه؛ اونم مطرح میکنیم تا دوستان پیشنهاداتشونو بگن اما می بینیم این راهکار هم بی نتیجست! لطفا مدیران عزیز یه حرکتی بزنن بلکه تغییری حاصل گردد :)

اما در مورد این پرسش ... میخوام هر کاربر در هر بار سفارش فقط امکان ثبت سفارش از یک دسته بندی رو داشته باشه ... یعنی زمانی که کاربر از دسته بندی 1 یک محصول به سبد اضافه کرد در هنگام اضافه کردن محصول از دسته بندی های غیر از 1 ارور بده یا وقتی رفت توی سبد خرید پیغام خطا رو بالای صفحه ببینه و نزاره بره برای تسویه حساب یا اگر رفت واسه تسویه نزاره ثبت کنه سفارشو و خطا بده ... یه همچین داستانی باشه خلاصه ... ما بی سوادارو ببخشید ... php کار نیستم ولی php کاران را دوست میدارم :)

 
آخرین ویرایش توسط مدیر:

S@jj@D

تازه وارد
19/12/16
45
0
6
ممنون از مطلب خوب شما

بله خب تبلیغات رایگان اونم تعمیرات لوازم خانگی ( :|:| ) تو انجمن پرشین اسکریپت ممنون گفتنم داره :)) شانس مارو دلمون خوش بود یکی بالاخره پست گذاشت تو تاپیک ما :|:|

 
آخرین ویرایش توسط مدیر:

Mohammad

مدیر انجمن
عضو کادر مدیریت
6/4/08
15,314
413
83
32
PersianScript
کاربر خاطی اخراج شد

این کد رو درون functions.php قالبتون قرار بدید و نتیجه رو همینجا بگید

کد:
function is_product_the_same_cat($valid, $product_id, $quantity) {
    global $woocommerce;
    // start of the loop that fetches the cart items
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        $terms = get_the_terms( $_product->id, 'product_cat' );
        $target_terms = get_the_terms( $product_id, 'product_cat' ); //get the current items
        foreach ($terms as $term) {
            $cat_ids[] = $term->term_id;  //get all the item categories in the cart
        }
        foreach ($target_terms as $term) {
            $target_cat_ids[] = $term->term_id; //get all the categories of the product
        }           
    }
    $same_cat = array_intersect($cat_ids, $target_cat_ids); //check if they have the same category
    if(count($same_cat) > 0) return $valid;
    else {
        wc_add_notice( 'این محصول مربوط به یک دسته بندی دیگر می باشد.', 'error' );
        return false;
    }
}
add_filter( 'woocommerce_add_to_cart_validation', 'is_product_the_same_cat',10,3);
 

S@jj@D

تازه وارد
19/12/16
45
0
6
ممنون از پیگیری شما؛ این کد رو در یکی از انجمن های لاتین دیده بودم راستیش اما اونی نیست که من میخام! البته من فکر میکنم خیلی خوب نتونستم منظورمو برسونم!

اجازه بدید الگوریتم کار رو خدمتتون بگم:

1- کاربر در مرحله اول اجازه اضافه کردن محصول از هر دسته بندی رو به سبد خرید داره.

2- اضافه کردن محصول های بعدی به سبد خرید با شرط قرار گرفتن در دسته بندی اولین محصول اضافه شده به سبد صورت میگیره. (اگر محصول اول از دسته بندی X بوده محصولات بعدی هم باید از دسته بندی X باشن ... اگر محصول اول از دسته بندی Y بوده محصولات بعدی هم باید از دسته بندی Y باشن و همینطور الی آخر ...)

3- در صورت عدم رعایت مرحله 2 پیغام خطایی ظاهر بشه با این مضمون که "شما در هر بار سفارش (در هر تراکنش) فقط اجازه سفارش از یک دسته بندی را دارید" (حالا این پیغام خطا میتونه در هنگام کلیک بر روی افزودن به سبد خرید به صورت پاپ آپ ظاهر بشه یا مثه پیغام خطاهای معمول ووکامرس در بالای صفحه ظاهر بشه)

4- در صورت رعایت مرحله 2 کاربر مشکلی برای ادامه کار و تسویه حساب نداشته باشه و سفارش به صورت کامل ثبت بشه!