Три частые правки магазина на WooCommerce: порядок товаров в каталоге, знак валюты и надписи на кнопке «В корзину». Часть делается в настройках, остальное - небольшими фильтрами в коде.
Куда добавлять код
Код из этой статьи вставляйте в functions.php дочерней темы - при обновлении основной темы её functions.php перезаписывается и правки пропадут. Если дочерней темы нет, используйте плагин для пользовательских фрагментов кода или небольшой собственный плагин (файл с заголовком плагина в папке wp-content/plugins/).
После вставки кода проверьте сайт: ошибка в PHP может сделать его недоступным. Удобнее сначала проверить на копии сайта.
Сортировка товаров

Сортировка по умолчанию
Без кода: «Внешний вид» → «Настроить» → «WooCommerce» → «Каталог товаров» → «Сортировка товаров по умолчанию». Доступны:
- по умолчанию (сортировка вручную + по названию);
- по популярности (количеству продаж);
- по рейтингу;
- по новизне;
- по цене - по возрастанию и по убыванию.
Порядок «по умолчанию» задаётся вручную: «Товары» → «Все товары» → «Сортировка», затем перетаскивание товаров мышью. Работает и для отдельных категорий: отфильтруйте список по категории, затем сортируйте.
В блочных темах страница каталога собирается из блоков в редакторе сайта, но сортировка по умолчанию по-прежнему берётся из этой настройки.
Сортировку по умолчанию можно задать и кодом, например «по новизне»:
add_filter( 'woocommerce_default_catalog_orderby', function () {
return 'date';
} );
Возможные значения: menu_order, popularity, rating, date, price, price-desc.
Своя сортировка для отдельной категории
Например, в категории «Распродажа» показывать сначала дешёвые товары:
add_filter( 'woocommerce_default_catalog_orderby', function ( $orderby ) {
if ( is_product_category( 'rasprodazha' ) ) {
return 'price';
}
return $orderby;
} );
rasprodazha - ярлык (slug) категории, его видно в «Товары» → «Категории».
Убрать или переименовать варианты в списке сортировки
Список сортировки над товарами формирует фильтр woocommerce_catalog_orderby:
add_filter( 'woocommerce_catalog_orderby', function ( $options ) {
unset( $options['rating'] ); // убрать «По рейтингу»
$options['date'] = 'Сначала новые'; // переименовать
return $options;
} );
Убрать список сортировки целиком:
add_action( 'init', function () {
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
} );
Новый вариант сортировки
Например, «по алфавиту»:
add_filter( 'woocommerce_catalog_orderby', function ( $options ) {
$options['title'] = 'По названию';
return $options;
} );
add_filter( 'woocommerce_get_catalog_ordering_args', function ( $args, $orderby ) {
if ( 'title' === $orderby ) {
$args['orderby'] = 'title';
$args['order'] = 'ASC';
}
return $args;
}, 10, 2 );
Знак валюты
Через настройки
«WooCommerce» → «Настройки» → «Основные» → «Настройки валюты»:
- валюта магазина;
- расположение символа: слева, справа, слева с пробелом, справа с пробелом;
- разделители тысяч и дробной части, число знаков после запятой.
Для рубля обычно выбирают «Справа с пробелом», разделитель тысяч - пробел, знаков после запятой - 0.
Заменить знак
Если вместо «₽» нужно «руб.», а вместо «$» - «USD»:
add_filter( 'woocommerce_currency_symbol', function ( $symbol, $currency ) {
switch ( $currency ) {
case 'RUB':
return 'руб.';
case 'USD':
return 'USD';
}
return $symbol;
}, 10, 2 );
Убрать знак
add_filter( 'woocommerce_currency_symbol', function ( $symbol, $currency ) {
return '';
}, 10, 2 );
Цены останутся без обозначения валюты. Если знак убран, а пробел от «справа с пробелом» мешает, переключите расположение на «Справа».
Учтите, что фильтр меняет знак во всём магазине, включая письма и счета. Если знак нужно убрать только в каталоге, проще скрыть его стилями: символ в разметке цены обёрнут в элемент с классом woocommerce-Price-currencySymbol.
Текст кнопки «В корзину»
Для кнопки в каталоге (архивы, категории, блоки товаров) и на странице товара используются разные фильтры:
// Кнопка в каталоге
add_filter( 'woocommerce_product_add_to_cart_text', function ( $text, $product ) {
if ( $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() ) {
return 'Купить';
}
return $text;
}, 10, 2 );
// Кнопка на странице товара
add_filter( 'woocommerce_product_single_add_to_cart_text', function ( $text, $product ) {
return 'Купить';
}, 10, 2 );
Проверка типа в первом фильтре нужна, чтобы не сломать смысл кнопок у вариативных товаров («Выбрать параметры») и товаров не в наличии («Подробнее»).
Свой текст для определённой категории:
add_filter( 'woocommerce_product_single_add_to_cart_text', function ( $text, $product ) {
if ( has_term( 'podarochnye-karty', 'product_cat', $product->get_id() ) ) {
return 'Оформить подарок';
}
return $text;
}, 10, 2 );
Сообщение после добавления в корзину
Фразу «Товар добавлен в вашу корзину» меняет фильтр wc_add_to_cart_message_html:
add_filter( 'wc_add_to_cart_message_html', function ( $message, $products ) {
$count = array_sum( $products );
$link = sprintf( '<a href="%s" class="button wc-forward">%s</a>', esc_url( wc_get_cart_url() ), 'Перейти в корзину' );
return sprintf( 'Добавлено в корзину: %d шт. %s', $count, $link );
}, 10, 2 );
Без кода
Если нужно поменять много надписей сразу, удобнее отредактировать перевод: тексты WooCommerce хранятся в языковых файлах, и плагины для редактирования переводов позволяют заменить любую фразу в админке. Правки при этом сохраняются отдельно и не пропадают при обновлении WooCommerce.
Если изменения не видны
- Очистите кэш: плагина кэширования, сервера и браузера.
- Проверьте, что код в дочерней теме, и она активна.
- Тема или конструктор страниц может выводить свою кнопку или сортировку вместо стандартной - тогда ищите настройку в самой теме.





добрый день! А можно с вами как то связаться, пообщаться по поводу сайта?
function woo_catalog_orderby( $orderby ) {
unset($orderby[«price»]); // Сортировка по цене по возрастанию
unset($orderby[«price-desc»]); // Сортировка по цене по убыванию
unset($orderby[«popularity»]); // Сортировка по популярности
unset($orderby[«rating»]); // Сортировка по рейтингу
unset($orderby[«date»]); // Сортировка по дате
unset($orderby[«title»]); // Сортировка по названию
unset($orderby[«menu_order»]); // Сортировка по умолчанию (можно определить порядок в админ панели)
return $orderby;
}
add_filter( «woocommerce_catalog_orderby», «woo_catalog_orderby», 20 );
_____________
Неработоспособная херня, фильтр становится неактивным
Все работает — примеры с рабочих проектов.
О каком фильтре идет речь?
Я использовал ваш код для представления в том виде как у вас. Подскажите как сделать чтобы сортировалось без перезагрузки страницы, ajax?
Да, делать Ajax запрос…
Сам не делал, поэтому тут не подскажу…
как сортировку по цене свою сделать, можете скинуть скрипт?
Сортировка по цене есть по умолчанию — стилизуйте её.
Спасибо огромное, за статью! )
Два дня мучилась со стандартной сортировкой по цене. Она не совпадала с тем, что выдавал цикл по ajax подгрузке товаров.
После прочтения Вашей статьи — просто стандартные типы сортировки убрала и вставила свои )
Подскажите, а как можно упорядочить в админке категории товаров выпадающем списке согласно иерархии? По умолчанию они упорядочены по имени.
Добрый день, спасибо за примеры, помогли!