WordPress лаборатория
Навигация
  • Главная
  • Как создать
    • Персональный Блог
    • Полноценный Сайт
    • Интернет-магазин
  • Блог
    • Инструкции
    • Электронная коммерция
    • Плагины
    • Заметки
  • Инструменты
    • Шаблон плагина
  • Премиум
    • Купец – WP + Woo
Присоединяйся
WordPress лаборатория
WordPress лаборатория
  • Главная
  • Как создать
    • Персональный Блог
    • Полноценный Сайт
    • Интернет-магазин
  • Блог
    • Инструкции
    • Электронная коммерция
    • Плагины
    • Заметки
  • Инструменты
    • Шаблон плагина
  • Премиум
    • Купец – WP + Woo
Профессиональная помощь экспертов
Мы можем помочь с любой задачей, так или иначе связанной с WordPress!
Создайте заявку
Бесплатная оценка стоимости без обязательств.

Создать заявку
🧒 Мой Аккаунт

Главная → Блог → Электронная коммерция WordPress

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

  • 13 августа, 2022
Редактируем поля оформления заказа в WooCommerce
Total
1
Репостов
0
1
0
0
0
Содержание
  1. Знакомство с фильтром woocommerce_checkout_fields
  2. Делаем обязательные поля не такими уж и обязательными 🙂
  3. Убираем лишние поля при оформлении заказа
  4. Меняем порядок полей
    1. Сортировка полей внутри группы
    2. Перемещение поля в другую группу
  5. Добавляем новые поля оформления заказа в WooCommerce

У WooCommerce, как и WordPress, есть куча отличных зацепок. При работе с ними нам потребуется вносить изменения всего в один файл и часто это functions.php. Этого будет достаточно, но конечно, было бы лучше, если бы это был functions.php вашей дочерней темы.

Фильтр, с которым будем работать – это woocommerce_checkout_fields.


Знакомство с фильтром woocommerce_checkout_fields

Если вы попали на эту страницу только потому, что хотите удалить некоторые ненужные поля оформления заказа в WooCommerce, то смело пропускайте этот шаг. Но если вы хотите понять весь процесс, то продолжайте планомерно поглощать информацию ?

Итак, добавьте товар в корзину на вашем сайта и перейдите на страницу оформления заказа WooCoommerce. В качестве темы используется «Storefront» и нашем случае страница оформления заказа выглядит вот так:

Поля на странице оформления заказа в WooCommerce
Поля на странице оформления заказа в WooCommerce

Давайте посмотрим, из чего состоит эта страница, а для этого вставляем следующий код в functions.php:

add_filter( 'woocommerce_checkout_fields' , 'wpbl_show_fields' );
 
function wpbl_show_fields( $array ) {
	
	// Выводим список полей, но только если пользователь имеет права админа
	if( current_user_can( 'manage_options' ) ){
	
		echo '<pre>';
		print_r( $array);
		echo '</pre>';

	}
	
	return $array;
}

После вставки кода вы увидите массив всех полей оформления заказа в WooCommerce с параметрами. Как вы можете видеть в массиве, эти поля отсортированы по группам: billing, shipping, account, order.

А конкретный массив полей, например для поля «Название компании» выглядит так:

[billing_company] => Array
	(
		[label] => Название компании
		[class] => Array
			(
				[0] => form-row-wide
			)

		[autocomplete] => organization
		[priority] => 30
		[required] => 
	)

Посмотрели на все имеющиеся поля оформления заказа и продолжаем…


Делаем обязательные поля не такими уж и обязательными 🙂

В этом руководстве мы будет работать с вариативным товарам, но существенной разницы нет.

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

Обязательные поля при оформлении заказа WooCommerce
Обязательные поля при оформлении заказа WooCommerce

В рамках этого руководства мы будем работать в основном с woocommerce_checkout_fields, но если вам одновременно нужны разные поля для выставления счета (Billing) и для доставки (Shipping), лучше использовать зацепку woocommerce_default_address_fields, потому что она влияет как на поля доставки, так и на выставление счетов одновременно.

Следующий код сделает все поля не странице оформления заказа не обязательными, ну разве что кроме поля для ввода телефона (см. чуть ниже):

add_filter( 'woocommerce_default_address_fields' , 'wpbl_fileds_validation' );
 
function wpbl_fileds_validation( $array ) {
	
	// Имя
	unset( $array['first_name']['required']);
	
	// Фамилия
	unset( $array['last_name']['required']);
	
	// Область / район
	unset( $array['state']['required']);
	
	// Почтовый индекс
	unset( $array['postcode']['required']);
	
	// Населённый пункт
	unset( $array['city']['required']);
	
	// 1-ая строка адреса 
	unset( $array['address_1']['required']);
	
	// 2-ая строка адреса 
	unset( $array['address_2']['required']);
	
	// Возвращаем обработанный массив
	return $array;
	
}

Ну а что там с полем телефона? К сожалению он не входит в массив полей адреса. Придется использовать woocommerce_checkout_fields, чтобы сделать поле не обязательным:

add_filter( 'woocommerce_checkout_fields', 'wpbl_phone_field_validation' );
 
function wpbl_phone_field_validation( $array ) {
	
	// Телефон
	unset( $array['billing']['billing_phone']['required'] );
	
	// Возвращаем обработанный массив
	return $array;
}

Убираем лишние поля при оформлении заказа

Самое плохо, что можно сделать это тупо скрыть не нужные поля используя CSS. Пожалуйста не делайте так!

Избавить от лишних полей очень просто:

add_filter( 'woocommerce_checkout_fields', 'wpbl_remove_some_fields', 9999 );
 
function wpbl_remove_some_fields( $array ) {
 
	//unset( $array['billing']['billing_first_name'] ); // Имя
	//unset( $array['billing']['billing_last_name'] ); // Фамилия
	//unset( $array['billing']['billing_email'] ); // Email
	//unset( $array['order']['order_comments'] ); // Примечание к заказу
 
	unset( $array['billing']['billing_phone'] ); // Телефон
	unset( $array['billing']['billing_company'] ); // Компания
	unset( $array['billing']['billing_country'] ); // Страна
	unset( $array['billing']['billing_address_1'] ); // 1-ая строка адреса 
	unset( $array['billing']['billing_address_2'] ); // 2-ая строка адреса 
	unset( $array['billing']['billing_city'] ); // Населённый пункт
	unset( $array['billing']['billing_state'] ); // Область / район
	unset( $array['billing']['billing_postcode'] ); // Почтовый индекс
 	
	// Возвращаем обработанный массив
	return $array;
}

Приоритет 9999 для зацепки выбран не случайно. Такого рода изменения нужно запускать как можно позже. Кто знает, что там у вас в теме?

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

Первые четыре строчки закомментированы, так как в качестве примера мы оставляем Имя, Фамилия, Email и Примечание к заказу:

Убираем лишние поля при оформлении заказа WooCommerce
Убираем лишние поля при оформлении заказа WooCommerce

Меняем порядок полей

Сортировка полей может показаться одной из самых муторных процедур, да собственно так и есть, но пропустить это важный пункт ни как нельзя.

Сортировка полей внутри группы

Во-первых, вы должны помнить, что поля разделены на группы, а их всего 4:

  • billing – Адрес выставления счёта
  • shipping – Адрес доставки
  • account – Информация об аккаунте
  • order – Детали заказа

Каждая из этих групп содержит поля и можно легко изменить их порядок с помощью специального параметра приоритета.

В качестве примера давайте сделаем поле Email первым, а это всего пара строк кода:

add_filter( 'woocommerce_checkout_fields', 'wplb_email_first' );
 
function wplb_email_first( $array ) {
	
	// Меняем приоритет
	$array['billing']['billing_email']['priority'] = 4;
	
	// Возвращаем обработанный массив
	return $array;
}

А в результате страница оформления заказа будет выглядеть вот так:

Меняем приоритет поля оформления заказа в WooCommerce
Меняем приоритет поля оформления заказа в WooCommerce

Почему мы установили priority (приоритет) равный 4? Всё просто. Каждое из полей по умолчанию имеет свой приоритет, все они перечислены в таблице ниже. Итак, согласно таблице, чтобы сделать поле электронной почты первым, нужно использовать значение меньше 10.

ГруппаНазваниеПриоритет
Billingbilling_first_name10
billing_last_name20
billing_company30
billing_country40
billing_address_150
billing_address_260
billing_city70
billing_state80
billing_postcode90
billing_phone100
billing_email110
Shippingshipping_first_name10
shipping_last_name20
shipping_company30
shipping_country40
shipping_address_150
shipping_address_260
shipping_city70
shipping_state80
shipping_postcode90
Accountaccount_password–
Orderorder_comments–

Иногда после игр с приоритетами можно поломать верстку и получится что-то вроде этого:

Поля при оформлении заказа отображаются не корректно
Поля при оформлении заказа отображаются не корректно

Почему так происходит? А всё просто – недостаточно отсортировать массив полей. Необходимо применить соответствующие классы и к каждому полю.

На самом деле каждое поле оформления заказа имеет свой стиль (класс CSS), в зависимости от его положения, есть 3 основных класса:

  • form-row-first – 50% в ширину, первый,
  • form-row-last – 50% в ширину, второй,
  • form-row-wide – 100% в ширину.

Давайте расставим правильные приоритеты и назначим плавильные CSS классы:

add_filter( 'woocommerce_checkout_fields', 'wplb_reorder', 9999 );
 
function wplb_reorder( $array ) {
	
	// Меняем приоритет
	$array['billing']['billing_email']['priority'] = 30;
	$array['billing']['billing_phone']['priority'] = 40;
	
	// Назначаем CSS классы
	$array['billing']['billing_email']['class'][0] = 'form-row-first';
	$array['billing']['billing_phone']['class'][0] = 'form-row-last';
	
	// Возвращаем обработанный массив
	return $array;
}

И как результат – всё выглядит правильно и приятно:

Правильные приоритеты и CSS классы для полей оформления заказа
Правильные приоритеты и CSS классы для полей оформления заказа

Всё просто да? 🙂

Перемещение поля в другую группу

К сожалению этот метод не всегда работает, да и не со всеми полями, но и обойти его стороной тоже нельзя. Для примера давайте переместим поле Email другую группу:

add_filter( 'woocommerce_checkout_fields', 'wpbl_move_to_order_group', 10000 );
 
function wpbl_move_to_order_group( $array ){
 
	// 1. Добавляем поле в новую группу
	$array['order']['billing_email'] = $array['billing']['billing_email'];
 
	// 2. Удаляем поле из предыдущей группы
	unset( $array['billing']['billing_email'] );
	
	// 3. Возвращаем полям прежний CSS классы (не нужно если до этого не меняли)
	$array['order']['billing_email']['class'][0] = 'form-row-wide';
	$array['billing']['billing_phone']['class'][0] = 'form-row-wide';
 
	// Возвращаем обработанный массив
	return $array;
 
}

И как результат:

Перемещение поля из одной группы в другую
Перемещение поля из одной группы в другую

Добавляем новые поля оформления заказа в WooCommerce

В качестве примера давайте добавим два поля в форму оформления заказа WooCommerce – выпадающий список под деталями выставления счета и флажок «Подписаться» в разделе примечаний к заказу. Первое поле будет обязательным.

Прежде всего, нам надо решить где разместить наши новые поля, а вот из чего нужно сделать выбор:

  • woocommerce_before_checkout_billing_form – До формы адреса оплаты.
  • woocommerce_after_checkout_billing_form – После формы адреса оплаты.
  • woocommerce_before_checkout_registration_form – До формы регистрации.
  • woocommerce_after_checkout_registration_form – После формы регистрации.
  • woocommerce_before_checkout_shipping_form – До формы адреса доставки.
  • woocommerce_after_checkout_shipping_form – После формы адреса доставки.
  • woocommerce_before_order_notes – До примечания к заказу.
  • woocommerce_after_order_notes – После примечания к заказу.

Всё понятно из названий зацепок, ими мы воспользуемся ниже, но они могут не сработать только в одном случае – если шаблоны оформления заказа WooCommerce по умолчанию: form-shipping.php и form-billing.php были переопределены в теме. В этом случае придется вручную добавлять новые поля в файлы темы в каталоге /woocommerce/checkout.

Итак, вот собственно код:

// Добавляем поля
add_action( 'woocommerce_after_checkout_billing_form', 'wpbl_select_field' );
add_action( 'woocommerce_after_order_notes', 'wpbl_checkbox_filed' );
 
// Сохраняем поля
add_action( 'woocommerce_checkout_update_order_meta', 'wpbl_save_fields' );
 
// Поле select
function wpbl_select_field( $checkout ){
 
	// Описываем поле
	woocommerce_form_field( 'dron', array(
		'type'          => 'select', // Тип поля. Можно любое - text, textarea, select, radio, checkbox, password. В нашем случае это select
		'required'	=> true, // этот параметр добавляет звездочку "*" к полю
		'class'         => array('wpbl-field', 'form-row-wide'), // Массив CSS классов
		'label'         => 'Доставить договор дроном?', // Заголовок поля
		'label_class'   => 'wpbl-label', // CSS класс заголовка
		'options'	=> array( // Массив опций для типа "select" или "radio"
			''		=> 'Что-то нужно выбрать', // Пусто значение означает, что нужно что-то выбрать
			'Yes'	=> 'Да, я хочу увидеть дрона!', // 'value'=>'Name'
			'No'	=> 'Нет, я сам к вам приду'
			)
		), $checkout->get_value( 'dron' ) );
 
	// Сюда так же можно добавить чуть-чуть HTML кода например <hr> и что-то ещё.
	// В качестве примера мы добавляем стилевое оформление для выпадающего списка. Не далейте так. Все стили должны быть в CSS файле!
	echo '<style>#dron{padding:15px; background:#f1f1f1; border:none;}</style>';
 
}
 
// Поле checkbox
function wpbl_checkbox_filed( $checkout ) {
 
	woocommerce_form_field( 'subscribe', array(
		'type'	=> 'checkbox',
		'class'	=> array('wpbl-field form-row-wide'),
		'label'	=> ' Я хочу подписать на рассылку',
		), $checkout->get_value( 'subscribe' ) );
 
}
 
// Функция сохранения
function wpbl_save_fields( $order_id ){
 
	// Сохраняем select
	if( !empty( $_POST['dron'] ) ){
		update_post_meta( $order_id, 'dron', sanitize_text_field( $_POST['dron'] ) );
	}
		
	// Сохраняем checkbox
	if( !empty( $_POST['subscribe'] ) && $_POST['subscribe'] == 1 ){
		update_post_meta( $order_id, 'subscribe', 1 );
	}
		
}

И как результат:

Добавляем поля оформления заказа в WooCommerce
Добавляем поля оформления заказа в WooCommerce

А после оформления в информации о заказе (WooCommerce → Заказы) появятся новые, только что созданные поля:

Сохранение значения новых полей в ордере
Сохранение значения новых полей в ордере

К сожалении, даже с учетом того, что для нашего выпадающего списка мы поставили ‘required’ => true, поле всё еще по сути не обязательно для заполнения. 🙁

Добавив небольшой фрагмент кода мы решим эту задачку:

add_action('woocommerce_checkout_process', 'wpbl_select_field_validation');
 
function wpbl_select_field_validation() {
 
	// Можно как угодно проверять, а в нашем случае это простая проверка на наличие в $_POST[]
	if ( empty( $_POST['dron'] ) ){
		wc_add_notice( 'Дрона то отправлять или нет?.', 'error' );
	}
		
}

Посмотрите на второй параметр функции wc_add_notice – он также поддерживает типы уведомлений «success» и «notice», но параметр «error» – именно то, что нужно в нашем случае.

Вывод ошибки если пользователь не заполнил нужное нам поле при оформлении заказа
Вывод ошибки если пользователь не заполнил нужные нам поля оформления заказа в WooCommerce

На этом пока всё.

Купец - WordPress шаблон
Купец
WordPress шаблон
Купец - WordPress шаблон

Наш премиальный шаблон для создания сайта компании или интернет-магазина с высокой конверсией на базе WordPress и WooCommerce, раскрывающий всю мощь плагина Elementor, как лучшего визуального редактора!

  • Хедер и Футер билдер
  • 60+ блоков для Elementor и 200+ настроек
  • Прокаченный WooCommerce и мега-меню
  • Списки желаний и образцы вариаций
Посмотреть демо
Подробнее о шаблоне

Если у вас есть вопросы или просто хотите поделиться своим мнением, то оставляйте комментарии ✌️

Спасибо.

Поделиться 0
Твитнуть 0
Похожие Темы
  • WooCommerce
Читайте так же
Хуки страницы товара в WooCommerce. Визуальная карта с примерами
Читать

Хуки страницы товара в WooCommerce – визуальная карта с примерами редактирования!

Как создать интернет-магазин на WordPress
Читать

Как создать интернет-магазин на WordPress и WooCommerce в 2023 году (Пошаговое руководство)

Вариативные товары в WooCommerce Руководство по созданию
Читать

Вариативные товары в WooCommerce – Руководство по созданию 2023

36 комментариев
  1. Сергей:
    27 сентября, 2020 в 10:14

    Статья топ, только сортировка полей внутри группы не помогла.

    Нашёл другой вариант:

    add_filter( "woocommerce_checkout_fields ", "custom_override_checkout_fields", 1);
    function custom_override_checkout_fields($fields) {
        $fields['billing']['billing_first_name']['priority'] = 1;
        $fields['billing']['billing_last_name']['priority'] = 2;
        $fields['billing']['billing_company']['priority'] = 3;
        $fields['billing']['billing_country']['priority'] = 4;
        $fields['billing']['billing_state']['priority'] = 5;
        $fields['billing']['billing_city']['priority'] = 6;
        $fields['billing']['billing_address_1']['priority'] = 7;
        $fields['billing']['billing_address_2']['priority'] = 8;
        $fields['billing']['billing_postcode']['priority'] = 9;
        $fields['billing']['billing_email']['priority'] = 10;
        $fields['billing']['billing_phone']['priority'] = 11;
        return $fields;
    }
    
    add_filter( 'woocommerce_default_address_fields', 'custom_override_default_locale_fields' );
    function custom_override_default_locale_fields( $fields ) {
        $fields['state']['priority'] = 5;
    	$fields['city']['priority'] = 6;
        $fields['address_1']['priority'] = 7;
        $fields['address_2']['priority'] = 8;
        return $fields;
    }
    

    Соответственно, во второй части кода то, что нужно передвинуть.

    Ответить
    1. Редакция:
      28 сентября, 2020 в 20:57

      Так никакой же разницы в структуре кода нет. Но в целом да, приоритеты могут быть изначально заменены в вашей теме 🙂

      Ответить
  2. Евгений:
    29 декабря, 2020 в 08:19

    Спасибо. минус 1 плагин в моем магазине ))

    Ответить
  3. Евгений:
    29 декабря, 2020 в 08:20

    Только у меня не получилось поставить населенный пункт и индекс в одну строчку

    Ответить
    1. Редакция:
      29 декабря, 2020 в 09:21

      Евгений,

      Минус один плагин – это хорошо, а по поводу “Населенный пункт и индекс в одну строчку” – поэкспериментируйте с классами “form-row-first, form-row-last, form-row-wide” (в статье описана работа с ними), но да, помогает не всегда 🙂

      Ответить
      1. Евгений:
        29 декабря, 2020 в 09:25

        Экспериментировал, при перезагрузке страницы они на мгновение встают в одну строку, но потом сразу обратно. Ладно, это не критично

        Ответить
        1. Редакция:
          29 декабря, 2020 в 09:44

          Ну если не критично, то и ладно ?

          И так сойдёт

          Ответить
  4. Александр:
    23 апреля, 2021 в 11:37

    Добрый день) А есть ли возможность input избавить от обертки woocommerce-input-wrapper и переставить label в другое место?

    Ответить
  5. Skoda:
    22 мая, 2021 в 22:47

    Добрый вечер. У меня задача. Вывести в чекаут несколько нужных полей, чтоб их видно было только пользователям определенной роли. Как это сделать?

    Ответить
  6. Анна:
    6 июня, 2021 в 16:51

    Добрый день!
    Использовала Ваш код для скрытия ненужных полей. Спасибо за подсказку!!
    Но есть одно НО. Код для того, чтобы сделать поля необязательными – работает, все отлично.
    Но если после него использовать код для того, чтобы скрыть поля – работает, но не совсем.
    Поля скрываются, но при нажатии “Подтвердить заказ” woo просит “Пожалуйста, введите адрес для продолжения” и не формирует заказ.
    Кстати, с помощью предложенного кода удаляются поля группы [billing], но остается чекбокс, который открывает полы группы [shipping]. И вот если там заполнить поле адрес (хотя оно помечено необязательным!!) тогда заказ формируется и все нормально. Но этого как раз и хотелось бы избежать…
    Я пробовала удалить все поля группы [shipping]. Они не отображаются. Но все равно woo просит то же самое и не формирует заказ. и чекбокс не скрывается. Вы могли бы подсказать, как это обойти?
    Кстати, если остановиться на том, чтобы сделать поля необязательными, и не скрывать их предложенным способом, woo ничего не просит, никаких адресов ему не надо. Заполняем одно (в моем случае) обязательное поле и все ОК.
    Можно, конечно, скрыть необязательные поля в css, но это как-то не правильно.

    Ответить
    1. Issatayski:
      1 августа, 2021 в 22:05

      add_filter( ‘woocommerce_checkout_fields’, ‘wpbl_shipping_first_name_field_validation’ );

      function wpbl_shipping_first_name_field_validation( $array ) {

      // Имя доставка
      unset( $array[‘shipping’][‘shipping_first_name’][‘required’] );

      // Возвращаем обработанный массив
      return $array;
      }

      Ответить
    2. Евгений:
      21 июня, 2022 в 01:44

      не удаляйте поле billing_country. и всё будет работать

      Ответить
  7. Владимир:
    15 августа, 2021 в 12:39

    Здравствуйте.
    Как сделать чтобы авторизированным пользователям не нужно было заполнять поля Woocommerce при оформлении заказа?

    Ответить
  8. Татьяна:
    31 августа, 2021 в 14:36

    Почему-то добавленные поля не отображаются в админке.
    И, судя по всему, не сохраняются.
    Это как-то поправить можно?

    Ответить
  9. artyom8819:
    2 октября, 2021 в 01:05

    Не в тему, но уже не знаю где искать, у кого спросить… Может знаете как изменить статус заказа функцией, или еще как. Что бы боту в админку не надо было лазить и там менять его

    Ответить
  10. Максим:
    5 ноября, 2021 в 10:03

    Статья огонь! Спасибо за труд!

    Ответить
    1. Редакция:
      5 ноября, 2021 в 10:28

      Спасибо. Всегда приятно такое слышать 🙂

      Ответить
  11. zello:
    9 декабря, 2021 в 00:53

    Добрый день. Пару рядовых вопросов. Как сделать чтобы на почту приходило?

    Ответить
  12. Светлана:
    23 января, 2022 в 11:03

    Добрый день.
    Подскажите, как переместить поле с выпадающим списком, при использовании вашего кода в другом блоке появляется пустая строка с текстом.

    Ответить
  13. Сергей:
    14 мая, 2022 в 11:04

    Отличная статья

    Ответить
  14. Влад:
    1 августа, 2022 в 01:42

    Автору спасибо!
    Евгений с биллинг_адресом – тоже красава!

    А как лейблы поменять, что по умолчанию прописаны в полях на странице? “Имя”, “Адрес” и тд.
    И, галочку про другой адрес доставки, можно убрать?

    Ответить
  15. Алексей:
    14 августа, 2022 в 22:40

    Вопрос от чайника. В какой functions.php добавлять код на сайте с Элементором? В тот, который находится в папке storefront? Или в папке hello-elementor? Или вообще в папке public_html/wp-includes? И есть ли разница в какой место скрипта добавлять код?
    Спасибо.

    Ответить
  16. Сергей:
    7 января, 2023 в 20:36

    Здравствуйте, помогли очень с убиранием ненужных полей, спасибо!

    Можно вопрос, может он и простой, но не могу пока решить… У меня магазин текстов планируется, пока на локалке тестирую, но пока простенький, не могу решить такую проблему:

    Как товар покупается, как сделать чтоб он после этого удалялся из магазина витрины, чтоб его еще раз не купили?

    где только не читал, галочки разные ставил про кол-во товаров… он все рано остается и его можно купить.. Можно как то это исправить? Буду рад любому совету!) ( ТГ @serhi87 или [email protected] )

    С Рождеством!

    Ответить
    1. WordPress лаборатория:
      9 января, 2023 в 11:47

      Сергей, здравствуйте!

      Самое простое решение – контролировать запасы товара:

      Запасы товара

      Ответить
  17. Alex:
    25 января, 2023 в 23:47

    Здравствуйте. Простите за невежество, но так и не смог сделать, чтобы поле страна было необязательным и скрытым. Если оно необязательное и показывается заказ отправляется, так же как и заполненное обязательное. Когда я его скрываю, заказ перестает отправляться. Что не так делаю?

    Ответить
  18. BongO:
    19 февраля, 2023 в 01:30

    Отлично описали все!
    Мне вот одного тут не хватает, как сделать так чтобы кнопка (Подтвердить заказ) была неактивна до того момента пока не будут заполнены все приоритетные поля?

    Почему меня это заинтересовало, Яндекс при продвижении сайта, снимает средства за отправку формы, даже если отправка была неудачной. Т.е даже если при нажатии на кнопку подтвердить заказ, с незаполненными полями и ошибкой отправки заказа, пока поля не заполнены, Яндекс все равно снимает деньги за неудачную отправку формы заказа.

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

    Ответить
    1. WordPress лаборатория:
      19 февраля, 2023 в 13:34

      Со своей точки зрения Яндекс дал правильные пояснения. Вам же, со своей стороны, просто не стоит создавать такую вот “платную” целю/конверсию. Самым правильным вариантом будет цель – “Успешный возврат из платёжной системы”, а не просто отправка формы.

      Ответить
      1. BongO:
        19 февраля, 2023 в 13:38

        Но у них же есть варианты за просмотры, за клики и.т.д

        Я вот выбрал чтобы только за реально сделанный заказ.
        А вот для этого оказалось требуется сделать кнопку неактивной пока обязательные поля не заполнены.

        Хотя странно, технически же если поля не заполнены то у меня пишется что надо заполнить и заказ не проходит.
        Но яндекс берет деньги даже за просто нажатие кнопки ((

        Ответить
        1. WordPress лаборатория:
          19 февраля, 2023 в 13:50

          Вы выбрали вариант “Оплата за конверсии”. С нашей точки зрения – это максимально правильный вариант, но саму цель, при которой действие считается оплачиваемой конверсией Вы выбрали неправильно!

          Ваша схема:
          1. Просмотр товара пользователем
          2. Добавление в корзину
          3. Отправка формы (цель) – тут Вы уже заплатили!
          4. Оплата на стороне эквайринга
          5. Возврат на Ваш сайт со статусом “Успех” или “Провал”

          Правильная схема:
          1. Просмотр товара пользователем
          2. Добавление в корзину
          3. Отправка формы
          4. Оплата на стороне эквайринга
          5. Возврат на Ваш сайт со статусом:
          5.1. Провал (например не хватило денег на карте).
          5.2. Успех (эквайринг передал в ГЕТ параметр определённый статус)

          Вот и цель Вам нужно создать которая будет срабатывать только на пункте 5.2.

          Ответить
      2. BongO:
        19 февраля, 2023 в 15:22

        Так то да.
        Но у меня на сайте прямой оплаты нет.
        Есть оплата при получении на Почте или CDEK.

        Ответить
        1. WordPress лаборатория:
          19 февраля, 2023 в 16:16

          В этом случае цель можно повесить на страницу “Спасибо за заказ”.
          При необходимости можно использовать хук для “woocommerce_thankyou”.

          Ответить
          1. BongO:
            19 февраля, 2023 в 16:52

            Но кнопка оплаты все равно при этом кликабельна до заполнения приоритетных полей, а яндекс будет списывать деньги за рекламу с настройками оплаты за ЗАКАЗ(отправку формы)

          2. BongO:
            19 февраля, 2023 в 16:54

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

        2. WordPress лаборатория:
          19 февраля, 2023 в 17:01

          Мы уже пояснил, что платить за цель “Отправка формы” – это не оправдано.

          Но если Вы решили пойти по сложному пути, то Вам нужно написать дополнительный JS скрипт, который и будет проверять форму на правильность её заполнения еще ДО события “Submit”

          Ответить
  19. Николай:
    16 июня, 2023 в 13:19

    Спасибо за статью, помогло!
    От себя добавлю, что если работаете с последней темой twenty twenty three, то там почему-то вообще нет файла functions.php.

    Но я можно просто содать такой файл в папке с темой, вуставить туда нужный код и все работает!

    Ответить
  20. Василий:
    8 августа, 2023 в 09:30

    Огромное спасибо за статью. Новичку, которому нужно выполнить определенную задачу – очень помогла!

    Ответить

Добавить комментарий Отменить ответ

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

Что еще почитать?
  • WordPress 5.5 - Новые возможности WordPress 5.5: блок навигационных меню, автоматические обновления плагинов и тем, каталог блоков, XML-карты сайтов, отложенная загрузка и многое другое.

    Что нового в WordPress 5.5 – автообновление тем, плагинов и многого другого

    Читать
  • WordPress страницы и записи – В чем разница

    WordPress страницы и записи – В чем разница

    Читать
  • Как создать сайт на WordPress

    Как создать сайт на WordPress с нуля – Пошаговая инструкция (2023)

    Читать
  • Как создать блог на WordPress ПРАВИЛЬНЫМ ПУТЕМ за 7 простых шагов

    Как создать блог на WordPress за 6 простых шагов. Руководство (2023)

    Читать
  • Сброс постоянных ссылок на всех сайтах в сети WordPress (Multisite)

    Сброс постоянных ссылок на всех сайтах в сети WordPress (Multisite)

    Читать
Инструменты разработчика
  • Шаблон WordPress плагина (генератор)
Нужна помощь?
Мы можем помочь с любой задачей, так или иначе связанной с WordPress!
Создайте заявку
Бесплатная оценка стоимости без обязательств.

Создать заявку
WordPress лаборатория - Еще один сайт на WP 💛
  • Обратная cвязь
  • Оплата и возврат
  • Пользовательское соглашение
  • Договор-оферта
  • Политика конфиденциальности

Введите ключевое слово и нажмите Ввод