Стандартные хлебные крошки WooCommerce на странице товара выглядят так: Главная → Каталог → Категория → Название товара. Последний элемент — не ссылка, а просто текст, и он дублирует заголовок, который стоит строкой ниже. Многие темы и дизайнеры предпочитают обрывать цепочку на категории: так крошки короче, не ломаются на длинных названиях и не повторяют H1. Сделать это можно одним фильтром, не трогая шаблоны.
Как устроены крошки в WooCommerce
Крошки собирает класс WC_Breadcrumb: он проходит по текущей странице, накапливает массив элементов вида [ название, ссылка ] и перед выводом пропускает его через фильтр woocommerce_get_breadcrumb. Дальше массив отрисовывает шаблон global/breadcrumb.php. Фильтр получает уже готовый список, поэтому это самое удобное место, чтобы убрать, добавить или переименовать любой элемент — шаблон остаётся стандартным и не требует обновления при выходе новых версий WooCommerce.
Код: убираем последний элемент на странице товара
add_filter( 'woocommerce_get_breadcrumb', 'shop_remove_last_crumb', 20, 2 );
function shop_remove_last_crumb( $crumbs, $breadcrumb ) {
// Только на странице товара и только если есть что убирать
if ( is_product() && count( $crumbs ) > 1 ) {
array_pop( $crumbs );
}
return $crumbs;
}
Код добавляется в functions.php дочерней темы. Условие is_product() ограничивает правку страницами товаров: на странице категории последний элемент — это сама категория, и её обычно оставляют. Проверка на количество элементов защищает от вырожденного случая, когда в массиве только «Главная»: убрать единственный элемент означало бы вывести пустую обёртку.
Если последний элемент нужно снимать везде — и на категориях, и на метках, и на страницах магазина, — уберите is_product() из условия. А если, наоборот, хочется оставить название товара, но оборвать его до разумной длины, замените array_pop на правку текста последнего элемента через wp_trim_words() или mb_strimwidth().
Что происходит с разметкой BreadcrumbList
WooCommerce выводит для крошек структурированные данные BreadcrumbList в JSON-LD, и берёт их из того же метода, через тот же фильтр. Значит, после установки кода из разметки тоже исчезнет последний элемент — визуальные крошки и данные для поисковиков останутся согласованными, что и требуется. Документация Google допускает, что последний элемент списка может не соответствовать текущей странице: обязательны только название и позиция каждого элемента, ссылка на текущую страницу не требуется. Проверить результат можно в инструменте проверки расширенных результатов.
Если крошки выводит SEO-плагин
Часто тема показывает не крошки WooCommerce, а крошки Yoast SEO или Rank Math — тогда фильтр выше ни на что не влияет, потому что эти плагины строят цепочку сами. У каждого есть свой фильтр с тем же смыслом:
// Yoast SEO
add_filter( 'wpseo_breadcrumb_links', 'shop_remove_last_crumb_yoast' );
function shop_remove_last_crumb_yoast( $links ) {
if ( is_product() && count( $links ) > 1 ) {
array_pop( $links );
}
return $links;
}
// Rank Math
add_filter( 'rank_math/frontend/breadcrumb/items', 'shop_remove_last_crumb_rankmath' );
function shop_remove_last_crumb_rankmath( $crumbs ) {
if ( is_product() && count( $crumbs ) > 1 ) {
array_pop( $crumbs );
}
return $crumbs;
}
Какой именно вариант используется на сайте, проще всего понять по HTML: у крошек WooCommerce обёртка с классом woocommerce-breadcrumb, у Yoast — #breadcrumbs со span внутри, у Rank Math — .rank-math-breadcrumb.
Классические и блочные темы
В блочных темах крошки магазина выводит блок «Хлебные крошки магазина» (Store Breadcrumbs). В актуальных версиях WooCommerce он отрисовывает ту же цепочку из WC_Breadcrumb, так что фильтр woocommerce_get_breadcrumb действует и на него. После установки проверьте страницу товара в обоих случаях — и в шаблоне темы, и в редакторе сайта, если он используется.
Когда всё же править шаблон
Переопределение woocommerce/global/breadcrumb.php в папке темы по-прежнему работает, и оно уместно, когда нужно поменять саму разметку: разделители, обёртки, иконку дома. Для удаления, добавления или переименования элементов шаблон трогать не стоит: копия шаблона в теме перестаёт получать обновления, и WooCommerce будет напоминать об устаревшей версии в разделе «Статус». Фильтр таких проблем не создаёт.
Коротко
Чтобы убрать название товара из хлебных крошек, достаточно фильтра woocommerce_get_breadcrumb с array_pop() и условием is_product(). Разметка BreadcrumbList поменяется вместе с видимыми крошками. Если крошки строит Yoast или Rank Math, используйте их собственные фильтры — логика та же.
Частые вопросы
Нет. Разметка BreadcrumbList изменится вместе с видимыми крошками и останется согласованной. Google не требует, чтобы последний элемент списка соответствовал текущей странице — обязательны только название и позиция элементов.
Скорее всего, крошки выводит не WooCommerce, а Yoast SEO или Rank Math. Проверьте класс обёртки в HTML и используйте фильтр соответствующего плагина: wpseo_breadcrumb_links или rank_math/frontend/breadcrumb/items.
Уберите проверку is_product() из условия — тогда последний элемент будет сниматься на всех страницах магазина. Проверку count( $crumbs ) > 1 оставьте.
Да. Вместо array_pop() измените текст последнего элемента массива через wp_trim_words() или mb_strimwidth(), оставив ссылку пустой.
Источники
- 1.WooCommerce Hooks Reference — woocommerce_get_breadcrumbhttps://woocommerce.github.io/code-reference/hooks/hooks.html
- 2.Breadcrumb (BreadcrumbList) structured data — Google Search Centralhttps://developers.google.com/search/docs/appearance/structured-data/breadcrumb
- 3.Yoast SEO: фильтр wpseo_breadcrumb_linkshttps://developer.yoast.com/customization/apis/breadcrumbs-api/



