Как удалить лишние поля для виртуальных товаров Woocommerce

Для книжного издательства, который продаёт электронные и физические книги, необходимо было настроить поля в корзине, которые не должны отображаться.

Например, не нужно поле «город», но его никак нельзя было убрать. Ни одного плагина на этот счёт не придумали, поэтому надо было искать решение, которое заключалось в замене полей корзины, если присутствуют только виртуальные товары

Просто убрать поля можно двумя плагинами:

  • WooCommerce Checkout & Account Field Editor
  • WooCommerce Easy Checkout Fields Editor

Одно из решений, которое было найдено, не работало по причине его старости и проверка на наличие виртуальных товаров в 2020 году надо было менять.

Ниже решение, которое я применил на своём сайте и взято отсюда: https://theme.co/forum/t/remove-the-billing-address-fields-for-virtual-orders-in-woocommerce/22292/6

  1. добавляйте код в function.php
  2. добавляйте виртуальный товар в корзину
  3. переходите на страницу /checkout/
  4. смотрите за наличием необходимых полей
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. Сами же товары после оплаты попадают в личный кабинет.

ЧИТАТЬ  Как удалить META товаров прописанных через Yoast

детали оплаты для виртуальных товаров

Если какие-то поля вам будут не нужны при заказе онлайн-продукции, то я не рекомендую использовать плагины удаления полей, потому что может случиться конфликт двух активных скриптов.

В нашем случае просто добавляем дополнительное условие для проверки наличия виртуальных товаров.

    if( woo_cart_virtual_downloadable_product_only() == false ) {
	unset($fields['billing']['billing_company']); //Название компании 
    }

Здесь я выключил строку названия компании.

Написать комментарий к тексту: