Давайте теперь перейдем к настройке стандартных кнопок количества товаров.
В первую очередь, следует отметить, что код HTML и PHP для кнопок количества находится в файле templates/global/quantity-input.php. Однако важно понимать, что если есть возможность обойтись без изменения файлов шаблона WooCommerce, то лучше воспользоваться этой возможностью. Если вы разрабатываете тему или плагин для широкого круга пользователей, то замена файлов шаблона не рекомендуется.
Поэтому мы рассмотрим способ, который позволит сделать изменения через фильтры и хуки, а также с применением легкого JavaScript.
1. Добавим наши кнопки плюса и минуса в function.php
add_action( 'woocommerce_before_quantity_input_field', 'aleks_quantity_minus', 25 );
add_action( 'woocommerce_after_quantity_input_field', 'aleks_quantity_plus', 25 );
function aleks_quantity_plus() {
echo '<button type="button" class="plus">+</button>';
}
function aleks_quantity_minus() {
echo '<button type="button" class="minus">-</button>';
}
2. JavaScript код
document.addEventListener('DOMContentLoaded', function() {
document.body.addEventListener('click', function(event) {
if (event.target.matches('button.plus, button.minus')) {
let clickedButton = event.target;
let parent = clickedButton.parentNode;
let input = parent.querySelector('input');
let qty = parseInt(input.value);
let min = parseInt(input.getAttribute('min')) || 0;
let max = parseInt(input.getAttribute('max')) || Infinity;
let step = parseInt(input.getAttribute('step')) || 1;
let updateCartButton = document.querySelector('[name="update_cart"]');
if (clickedButton.classList.contains('plus')) {
if (max && max <= qty) {
input.value = max;
} else {
input.value = qty + step;
}
} else if (clickedButton.classList.contains('minus')) {
if (min && min >= qty) {
input.value = min;
} else if (qty > 1) {
input.value = qty - step;
}
}
updateCartButton.removeAttribute('disabled');
}
});
});
3. CSS
.quantity input::-webkit-outer-spin-button,
.quantity input::-webkit-inner-spin-button {
display: none;
margin: 0;
}
.quantity input.qty {
appearance: textfield;
-webkit-appearance: none;
-moz-appearance: textfield;
}
Данное решение работает не только в карточке товара, но и в корзине. При изменении колличества активируется кнопка "Обновить".