WooCommerce переполнен фильтрами, крючками и функциями, которые помогут вам настроить и использовать плагин в вашей теме или плагине. Вот несколько небольших, но полезных примеров кода, а также советы и рекомендации по общим изменениям различных текстовых выходов.
Изменение текста кнопки «Добавить в корзину»
Есть два фильтра; один для текста «добавить в корзину» в цикле (woocommerce_product_add_to_cart_text), а другой для кнопки в отдельном продукте (woocommerce_product_single_add_to_cart_text):
// Single product view
add_filter('woocommerce_product_single_add_to_cart_text', function($text) {
return __('Buy this now', 'txtdomain');
});
// Loop
add_filter('woocommerce_product_add_to_cart_text', function($text) {
return __('Buy this', 'txtdomain');
});
Однако имейте в виду, что это переопределяет все тексты «Добавить в корзину». Даже те, которые изначально были «Выбрать варианты» (переменные товары) или «Подробнее» (недоступные для покупки товары — нет цены или их нет в наличии). Если вам нужна более тонкая настройка, включите в эти фильтры второй аргумент; объект продукта. Используйте объект продукта для условного управления выводом. Например, по типу продукта или по тому, можно ли его купить:
add_filter('woocommerce_product_add_to_cart_text', function($text, $product) {
if ($product->is_type('variable')) {
return __('Take your pick', 'txtdomain');
}
if (!$product->is_purchasable()) {
return __('Read more', 'txtdomain');
}
return $text;
}, 10, 2);
Изменить вывод ценового диапазона для переменных и сгруппированных продуктов
По умолчанию WooCommerce будет отображать самую низкую и самую высокую цену на переменные и сгруппированные продукты с «-» между ними. Вы можете очень легко изменить этот выходной диапазон. Например, убедитесь, что он показывает только самую низкую цену в форме «От:». WooCommerce имеет один фильтр для вариативных товаров и другой для сгруппированных товаров, так что давайте рассмотрим их оба по очереди.
Управление выводом HTML ценового диапазона для переменных продуктов осуществляется с помощью фильтра woocommerce_variable_price_html. Объект продукта предоставляется в качестве второго аргумента.
Внутри функции нам нужно получить все цены. WooCommerce предлагает удобную функцию для переменных объектов продукта, get_variation_prices(). Это возвращает массив всех цен вариантов, отсортированных в порядке убывания. Все, что нам нужно сделать, это извлечь первый элемент из массива цен и красиво его вывести:
add_filter('woocommerce_variable_price_html', function($html, $product) {
$prices = $product->get_variation_prices(true);
$from_price = wc_price(current($prices['price']));
return sprintf(__('From: %s', 'txtdomain'), $from_price. $product->get_price_suffix());
}, 10, 2);
Выходной HTML-фильтр ценового диапазона для сгруппированных товаров очень похож на переменные товары, но с одним отличием: в качестве аргумента фильтру передается массив цен всех сгруппированных «детских» товаров. Используемый фильтр woocommerce_grouped_price_html:
add_filter('woocommerce_grouped_price_html', function($html, $product, $child_prices) {
$from_price = wc_price(current($child_prices));
return sprintf(__('From: %s', 'txtdomain'), $from_price. $product->get_price_suffix());
}, 10, 3);
Изменить вывод текста состояния запасов
Если вы активировали отображение состояния запасов в настройках WooCommerce, он должен отображать точное количество оставшихся запасов в представлении одного продукта (например, «42 в наличии»). Однако вы можете изменить вывод, чтобы вместо этого отображался диапазон, а не точная сумма. Или просто «В наличии», если хотите скрыть номер.
Для этого используется фильтр, woocommerce_get_stock_htmlи если вы включите второй аргумент, вы получите объект продукта. С объектом продукта вы можете выполнять необходимые операции для тонкой настройки вывода. Имейте в виду, что фильтруемый вывод обернут внутри <p>элемента, и ваш вывод тоже должен быть.
Для простого отображения «В наличии» или «Нет в наличии» этого будет достаточно:
add_filter('woocommerce_get_stock_html', function($html, $product) {
if ($product->is_in_stock()) {
return sprintf('<p class="stock in-stock">%s</p>', __('In stock', 'txtdomain'));
} else {
return sprintf('<p class="stock out-of-stock">%s</p>', __('Out of stock', 'txtdomain'));
}
return $html;
}, 10, 2);
Отображение запаса в «значениях диапазона» можно сделать следующим образом:
add_filter('woocommerce_get_stock_html', function($html, $product) {
$current_stock = $product->get_stock_quantity();
if ($current_stock <= 0) {
$new_html = __('Out of stock', 'txtdomain');
} else if ($current_stock > 500) {
$new_html = sprintf('500+ %s', __('in stock', 'txtdomain'));
} else if ($current_stock > 100) {
$new_html = sprintf('100+ %s', __('in stock', 'txtdomain'));
} else if ($current_stock > 20) {
$new_html = sprintf('20+ %s', __('in stock', 'txtdomain'));
} else {
$new_html = __('In stock', 'txtdomain');
}
return sprintf('<p class="stock">%s</p>', $new_html);
}, 10, 2);
Переименовать статусы заказа
Иногда клиент хочет, чтобы разные метки на статусах заказов имели больше смысла в соответствии с их практикой интернет-магазина. Например, вы можете переименовать «На удержании» в «Не отправлено» или «Выполнено» в «Отправлено». Просто чтобы понять, какие заказы нужно отправить, а какие уже отправлены. WooCommerce предлагает простой фильтр wc_order_statusesдля всех доступных статусов заказов.
add_filter('wc_order_statuses', function($order_statuses) {
$order_statuses['wc-on-hold'] = __('Unsent', 'txtdomain');
$order_statuses['wc-completed'] = __('Sent', 'txtdomain');
return $order_statuses;
});
Доступные клавиши: wc-pending, wc-processing, wc-on-hold, wc-completed, wc-cancelled, wc-refundedи wc-failed.