Для книжного издательства, который продаёт электронные и физические книги, необходимо было настроить поля в корзине, которые не должны отображаться.
Например, не нужно поле «город», но его никак нельзя было убрать.
Ни одного плагина на этот счёт не придумали, поэтому надо было искать решение, которое заключалось в замене полей корзины, если присутствуют только виртуальные товары
Два плагина для Woocommerce
Просто убрать поля можно двумя плагинами:
Одно из решений, которое было найдено, не работало по причине его старости и проверка на наличие виртуальных товаров в 2020 году надо было менять.
Ниже решение, которое я применил на своём сайте и взято отсюда: https://theme.co/forum/t/remove-the-billing-address-fields-for-virtual-orders-in-woocommerce/22292/6
- добавляйте код в function.php
- добавляйте виртуальный товар в корзину
- переходите на страницу /checkout/
- смотрите за наличием необходимых полей
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_virtual_downloadable_product_only() == 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/downloadable product only
*
* @return bool
*/
function woo_cart_virtual_downloadable_product_only() {
global $woocommerce;
// By default, virtual/downloadable product only
$virtual_downloadable_products_only = true;
// Get all products in cart
$products = $woocommerce->cart->get_cart();
// Loop through cart products
foreach( $products as $product ) {
// Get product ID
$product_id = $product['product_id'];
// is variation downloadable
$is_downloadable = $product['data']->downloadable;
// is variation virtual
$is_virtual = $product['data']->virtual ;
// Update $virtual_downloadable_products_only if product is not virtual or downloadable and exit loop
if( $is_virtual == 'no' && $is_downloadable == 'no' ){
$virtual_downloadable_products_only = false;
break;
}
}
return $virtual_downloadable_products_only;
}
Данный выше код оставил у меня в виртуальных заказах только имя, фамилию, телефон и email.
Сами же товары после оплаты попадают в личный кабинет.
Если какие-то поля вам будут не нужны при заказе онлайн-продукции, то я не рекомендую использовать плагины удаления полей, потому что может случиться конфликт двух активных скриптов.
В нашем случае просто добавляем дополнительное условие для проверки наличия виртуальных товаров.
if( woo_cart_virtual_downloadable_product_only() == false ) {
unset($fields['billing']['billing_company']); //Название компании
}
Здесь я выключил строку названия компании.