• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Разные формы заказов для разных типов товаров

d0ct0r

Новичок
Доброго дня!
Наш магазин реализует DVD диски. Есть 2 группы товаров:
1- диски, реализуемые через почту
2-диски, реализуемые посредством продажи ссылки, по которой можно скачать видео

Для оформления заказа товаров группы 1 - достаточно стандартной формы заказа. А вот для оформления покупки товара группы 2 - форму необходимо немного изменить, некоторые поля убрать, некоторые добавить.

Есть ли готовая реализация плагина? Спасибо!
 

d0ct0r

Новичок
Нет, не совсем... WooCommerce Extra Product Options задает параметры товара, а мне нужно просто изменить форму оформления заказа... Проще говоря..

ДОЛжно быть 2 формы заказа
- ФОРМА заказа электронного товара (ссылки для закачки) должна содержать: только ИМЯ, ЕМЕЙЛ, ТЕЛЕФОН
- ФОРМА заказа дисков : ФИО, точный полный АДРЕС, ТЕЛЕФОН для связи
 

artemkomarov

Специалист
Местный
ДОЛжно быть 2 формы заказа
- ФОРМА заказа электронного товара (ссылки для закачки) должна содержать: только ИМЯ, ЕМЕЙЛ, ТЕЛЕФОН
- ФОРМА заказа дисков : ФИО, точный полный АДРЕС, ТЕЛЕФОН для связи
Такого не видел. Но реализуется довольно просто дополнительной проверкой на товары и их тип и в зависимости от результата какие то поля отключить а какие то добавить.
 

d0ct0r

Новичок
add_filter( 'woocommerce_checkout_fields' , 'woo_remove_billing_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;
}
/**
* Проверяем, содержит ли корзина виртуальные товары
*
* @return bool
*/
function woo_cart_has_virtual_product() {
global $woocommerce;
// По-умолчанию, виртуальных товаров нет
$has_virtual_products = false;
// Значение по-умолчанию количества виртуальных товаров
$virtual_products = 0;
// Получаем все товары в корзине
$products = $woocommerce->cart->get_cart();
// Проходимся по всем товаров в корзине
foreach( $products as $product ) {
// Получаем ID товара и '_virtual' post meta
$product_id = $product['product_id'];
$is_virtual = get_post_meta( $product_id, '_virtual', true );
// Обновляем $has_virtual_product если товар является виртуальным
if( $is_virtual == 'yes' )
$virtual_products += 1;
}
if( count($products) == $virtual_products )
$has_virtual_products = true;
return $has_virtual_products;
}




КАК-ТО ТАК... Но ничего не происходит... (Размещал в function.php)
 

Bo3gyX

Новичок
add_filter( 'woocommerce_checkout_fields' , 'woo_remove_billing_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;
}
/**
* Проверяем, содержит ли корзина виртуальные товары
*
* @return bool
*/
function woo_cart_has_virtual_product() {
global $woocommerce;
// По-умолчанию, виртуальных товаров нет
$has_virtual_products = false;
// Значение по-умолчанию количества виртуальных товаров
$virtual_products = 0;
// Получаем все товары в корзине
$products = $woocommerce->cart->get_cart();
// Проходимся по всем товаров в корзине
foreach( $products as $product ) {
// Получаем ID товара и '_virtual' post meta
$product_id = $product['product_id'];
$is_virtual = get_post_meta( $product_id, '_virtual', true );
// Обновляем $has_virtual_product если товар является виртуальным
if( $is_virtual == 'yes' )
$virtual_products += 1;
}
if( count($products) == $virtual_products )
$has_virtual_products = true;
return $has_virtual_products;
}




КАК-ТО ТАК... Но ничего не происходит... (Размещал в function.php)


// Обновляем $has_virtual_product если товар является виртуальным
if( $is_virtual == 'yes' )
$virtual_products += 1;
else
return false; //
блок кода до } замените, на тот что выше.
 
  • Like
Реакции: D&B
Сверху Снизу