حذف فیلدهای غیرضروری از صفحه تسویه حساب ووکامرس

hosseinshahraji

تازه وارد
سلام
من افزونه ووکامرس فارسی رو نصب دارم (افزونه فارسی ساز ووکامرس موجود در مخزن وردپرس) و میخوام فیلدهای غیرضروری برای محصولات دانلودی رو از فرم صورتحساب پاک کنم اما مسئله اینه که وقتی گزینه «حذف فیلدهای غیرضروری« رو فعال میکنم برای محصولات فیزیکی هم آدرس و استان و ... حذف میشه. در واقع محصولی دارم که متغیره و به سه حالت: 1-فیزیکی 2-دانلودی 3-فیزیکی و دانلودی به فروش میرسه. افزونه Digital Goods for Woocommerce Checkout رو هم نصب کردم ولی مشکلش اینه که در حالت سوم یعنی حالت ترکیبی دانلودی و فیزیکی مثل محصولات دانلودی عمل میکنه و فیلدها رو پاک میکنه
من میخوام برای دانلودی ها فقط پاک بشه و برای فیزیکی و فیزیکی-دانلودی وجود داشته باشه و علاوه بر این اگه کاربر تو سبد خریدش فرضا 10 تا محصول داره که 9تاش دانلودی و 1 فیزیکیه بازم آدرس رو نشون بده.
ممنون میشم کمکم کنین خیلی دنبالشم
 

Mohammad

مدیر انجمن
پرسنل مدیریت
ساختار ووکامرس طوری هست در صورتی که فایل قابل دانلود باشه. حالت های دیگر رو در نظر نمیگیره...
نمیشه حالتی به طور میکس یا بینابین ایجاد کرد.
 

hosseinshahraji

تازه وارد
نمیشه کدش رو نوشت؟
که مثلا چک کنه اگه تیک «مدیریت انبارداری» برای حداقل یکی از محصوالت سبد خرید خورده بود، بیاد فیلدها رو نمایش بده درغیراینصورت حذف کنه
 

mohamad_a226

کاربر عضو
سلام
من افزونه ووکامرس فارسی رو نصب دارم (افزونه فارسی ساز ووکامرس موجود در مخزن وردپرس) و میخوام فیلدهای غیرضروری برای محصولات دانلودی رو از فرم صورتحساب پاک کنم اما مسئله اینه که وقتی گزینه «حذف فیلدهای غیرضروری« رو فعال میکنم برای محصولات فیزیکی هم آدرس و استان و ... حذف میشه. در واقع محصولی دارم که متغیره و به سه حالت: 1-فیزیکی 2-دانلودی 3-فیزیکی و دانلودی به فروش میرسه. افزونه Digital Goods for Woocommerce Checkout رو هم نصب کردم ولی مشکلش اینه که در حالت سوم یعنی حالت ترکیبی دانلودی و فیزیکی مثل محصولات دانلودی عمل میکنه و فیلدها رو پاک میکنه
من میخوام برای دانلودی ها فقط پاک بشه و برای فیزیکی و فیزیکی-دانلودی وجود داشته باشه و علاوه بر این اگه کاربر تو سبد خریدش فرضا 10 تا محصول داره که 9تاش دانلودی و 1 فیزیکیه بازم آدرس رو نشون بده.
ممنون میشم کمکم کنین خیلی دنبالشم
سلام. این کد رو تو فانکشن قالب میتونی قرار بدی:
PHP:
add_filter( 'woocommerce_checkout_fields' , 'Noandishaan_Checkout' );
function Noandishaan_Checkout( $fields ) {
    
    global $woocommerce;
    $hasPhysicalProduct = false;
    
    if ( ! empty( $woocommerce->cart->cart_contents ) ) {
        
        $cart = $woocommerce->cart->get_cart();
        foreach ( $cart as $key => $values ) {

            $_product = get_product( $values['variation_id'] ? $values['variation_id'] : $values['product_id'] );

            if ( ! empty( $_product ) && $_product->exists() && $values['quantity'] > 0 ) {
                
                if ($_product->virtual == 'no' && $_product->downloadable == 'no') {
                    $hasPhysicalProduct = true;
                    break;
                }
            }
        }
    }

    if ($hasPhysicalProduct == false) {
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
    }
    return $fields;
}
 

hosseinshahraji

تازه وارد
سلام. این کد رو تو فانکشن قالب میتونی قرار بدی:
PHP:
add_filter( 'woocommerce_checkout_fields' , 'Noandishaan_Checkout' );
function Noandishaan_Checkout( $fields ) {
   
    global $woocommerce;
    $hasPhysicalProduct = false;
   
    if ( ! empty( $woocommerce->cart->cart_contents ) ) {
       
        $cart = $woocommerce->cart->get_cart();
        foreach ( $cart as $key => $values ) {

            $_product = get_product( $values['variation_id'] ? $values['variation_id'] : $values['product_id'] );

            if ( ! empty( $_product ) && $_product->exists() && $values['quantity'] > 0 ) {
               
                if ($_product->virtual == 'no' && $_product->downloadable == 'no') {
                    $hasPhysicalProduct = true;
                    break;
                }
            }
        }
    }

    if ($hasPhysicalProduct == false) {
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
    }
    return $fields;
}
سلام ممنون
این کد خوب کار کرد اما باز هم وقتی محصولی که هم مدیریت موجودی داره و هم دانلودی هستی یعنی حالت سوم (فیزیکی-دانلودی) به صورت دانلود عمل کرده و فیلدها رو پاک میکنه
 
بالا