Артём Мáлков

Как изменить порядок вывода полей в оформлении заказа в WooCommerce?

21 апр0 комм

WooCommerce является популярным и бесплатным e-commerce решением для CMS WordPress. Я сам лично очень часто работаю с этим дополнением и решаю различные нестандартные задачи, одна из которых – это переопределение порядка вывода полей в оформлении заказа.

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

Изменение порядка вывода полей в оформлении заказа в WooCommerce версии ниже 3.0.4

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

И первый – это вариант для более ранних версий.

Для того чтобы поменять порядок полей относящихся к оплате, в файл functions.php вашей темы (в самый низ) вставьте:

function sort_fields_billing($fields) {
 
	$order_fields = array(
		"billing_first_name",
		"billing_city",
		"billing_address_1",
		"billing_postcode",
		"billing_address_2",
		"billing_company",
		"billing_email",
		"billing_last_name",
		"billing_phone",
		"billing_state",
		"billing_country",
	);
	
	foreach($order_fields as $field) {
		
		$ordered_fields[$field] = $fields["billing"][$field];
	
	}
 
	$fields["billing"] = $ordered_fields;
	
	return $fields;
 
}

add_filter("woocommerce_checkout_fields", "sort_fields_billing");

Для смены порядка полей доставки воспользуемся аналогичной функцией:

function sort_fields_shipping($fields) {
 
	$order_fields = array(
		"shipping_city",
		"shipping_postcode",
		"shipping_country",
		"shipping_last_name",
		"shipping_first_name",
		"shipping_address_1",
		"shipping_state",
		"shipping_company",
		"shipping_address_2",
	);
	
	foreach($order_fields as $field) {
		
		$ordered_fields[$field] = $fields["shipping"][$field];
	
	}
 
	$fields["shipping"] = $ordered_fields;
	
	return $fields;
 
}

add_filter("woocommerce_checkout_fields", "sort_fields_shipping");

Ее вы так же вставляете в низ файла functions.php, который находится в папке вашей темы.

На что тут стоит обратить внимание? В обоих случаях переменная $order_fields содержит в себе набор полей, относящихся к одному из областей оформления заказа. То, в какой последовательности эти поля будут выведены на сайте, напрямую зависит от порядка их перечисления в указанной переменной.

Но не забывайте, что этот вариант работает лишь в старых версиях WooCommerce.

Изменение порядка вывода полей в оформлении заказа в WooCommerce версии выше 3.0.4

Итак, второй вариант, который стабильно работает в последних (на момент написания статьи) версиях WooCommerce.

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

Первая (для блока оплаты) – это:

function sort_fields_billing($fields) {

	$fields["billing"]["billing_first_name"]["priority"] = 1;
	$fields["billing"]["billing_last_name"]["priority"] = 5;
	$fields["billing"]["billing_company"]["priority"] = 6;
	$fields["billing"]["billing_address_1"]["priority"] = 2;
	$fields["billing"]["billing_address_2"]["priority"] = 8;
	$fields["billing"]["billing_city"]["priority"] = 7;
	$fields["billing"]["billing_postcode"]["priority"] = 9;
	$fields["billing"]["billing_country"]["priority"] = 3;
	$fields["billing"]["billing_state"]["priority"] = 11;
	$fields["billing"]["billing_email"]["priority"] = 4;
	$fields["billing"]["billing_phone"]["priority"] = 10;
	
	return $fields;
	
}

add_filter("woocommerce_checkout_fields", "sort_fields_billing");

и вторая (для блока доставки):

function sort_fields_shipping($fields) {

	$fields["shipping"]["shipping_first_name"]["priority"] = 9;
	$fields["shipping"]["shipping_last_name"]["priority"] = 4;
	$fields["shipping"]["shipping_company"]["priority"] = 8;
	$fields["shipping"]["shipping_address_1"]["priority"] = 7;
	$fields["shipping"]["shipping_address_2"]["priority"] = 6;
	$fields["shipping"]["shipping_city"]["priority"] = 2;
	$fields["shipping"]["shipping_postcode"]["priority"] = 3;
	$fields["shipping"]["shipping_country"]["priority"] = 5;
	$fields["shipping"]["shipping_state"]["priority"] = 1;
	
	return $fields;
	
}

add_filter("woocommerce_checkout_fields", "sort_fields_shipping");

Как вы могли заметить из примера, здесь последовательность перечисления полей не играет никакой роли, и важное здесь – это числовое значение «priority».

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

Но стоит отметить, что порядок приоритетов вы задаете сами, и он не обязательно должен начинаться с единицы с шагом 1, а может быть, например, 10, 20, 30, или 2, 20, 200 и так далее.

Рекомендуем к просмотру
Как скрыть поля в оформлении заказа в WooCommerce?
Хаки
Делаем обязательные/необязательные поля в оформлении заказа в WooCommerce
Хаки
Выводим популярные записи за разный период времени по количеству просмотров и комментариев в WordPress
Статьи и советы
0
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх
«Pandoge» - помощник вебмастера