Упрощение Checkout формы WooCommerce для виртуальных товаров

Для виртуальных товаров совсем не обязательно «грузить» клиента заполнением не нужных полей, таких как адрес, индекс и тд.

Чтобы быстро упростить Checkout форму Woocommrece для виртуальных товаров, следует использовать следующий сниппет:

/**
 * @snippet       Simplify Checkout if Only Virtual Products
 * @how-to        Watch tutorial @ https://businessbloomer.com/?p=19055
 * @sourcecode    https://businessbloomer.com/?p=78351
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 3.4.4
 */
 
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_simplify_checkout_virtual' );
 
function bbloomer_simplify_checkout_virtual( $fields ) {
     
    $only_virtual = true;
     
    foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        // Check if there are non-virtual products
        if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false; 
    }
     
    if( $only_virtual ) {
        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']);
        add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
    }
     
    return $fields;
}

Этот сниппет нужно вставить в файл functions.php вашей темы. Но лучше использовать дочернюю тему, так как при обновлении эти настройки слетят.

Если вы хотите оставить какие-то поля, вы можете просто «закомментить» нужные строчки. Например:

//unset($fields['billing']['billing_company']);

Таким образом мы вернули поле Компания в форму заказа.