2015-09-07 114 views
1

我發現此要點隱藏虛擬產品的不需要的結賬字段。如果有虛擬產品和實物產品,我如何調整它以便不隱藏字段?我擅長編寫WordPress條件語句,但我無法理解如何編寫此條款。WooCommerce - 條件語句刪除不需要的結帳字段

我希望有任何幫助。

<?php 

add_filter('woocommerce_checkout_fields' , 'woo_remove_billing_checkout_fields'); 

/** 
* Remove unwanted checkout fields 
* 
* @return $fields array 
*/ 
function woo_remove_billing_checkout_fields($fields) { 

    if(woo_cart_has_virtual_product() == true) { 
     unset($fields['billing']['billing_company']); 
     unset($fields['billing']['billing_address_1']); 
     unset($fields['billing']['billing_address_2']); 
     unset($fields['billing']['billing_city']); 
     unset($fields['billing']['billing_postcode']); 
     unset($fields['billing']['billing_country']); 
     unset($fields['billing']['billing_state']); 
     unset($fields['billing']['billing_phone']); 
     unset($fields['order']['order_comments']); 
     unset($fields['billing']['billing_address_2']); 
     unset($fields['billing']['billing_postcode']); 
     unset($fields['billing']['billing_company']); 
     unset($fields['billing']['billing_city']); 
    } 

    return $fields; 
} 

/** 
* Check if the cart contains virtual product 
* 
* @return bool 
*/ 
function woo_cart_has_virtual_product() { 

    global $woocommerce; 

    // By default, no virtual product 
    $has_virtual_products = false; 

    // Default virtual products number 
    $virtual_products = 0; 

    // Get all products in cart 
    $products = $woocommerce->cart->get_cart(); 

    // Loop through cart products 
    foreach($products as $product) { 

     // Get product ID and '_virtual' post meta 
     $product_id = $product['product_id']; 
     $is_virtual = get_post_meta($product_id, '_virtual', true); 

     // Update $has_virtual_product if product is virtual 
     if($is_virtual == 'yes') 
     $virtual_products += 1; 
    } 

    if(count($products) == $virtual_products) 
    $has_virtual_products = true; 

    return $has_virtual_products; 

} 

回答

0

將下面的代碼添加到下面的代碼中,該代碼告訴它如果產品不是虛擬的,立即釋放。

// Update $has_virtual_product if product is virtual 
    if($is_virtual == 'yes') 
     $virtual_products += 1; 
    else 
     return false; // Cart contains both type of products, bail out immediately 
+0

是的,這個工程。謝謝! 如果我改變 '如果(woo_cart_has_virtual_product()==真)'來 '如果(woo_cart_has_virtual_product()==假)' 它不工作。因此,如果我想在沒有任何虛擬產品的情況下取消結帳字段,我該如何編寫它? – Angela

+0

a)從我的代碼中刪除'else'部分。 b)在'if'子句中改變'$ virtual_products + = 1;'並返回true;'c)將if(woo_cart_has_virtual_product()== true)'改爲'if(woo_cart_has_virtual_product()== false)'。 –

+0

謝謝!有效。 :) – Angela