Когда-то мы с вами создавали свою собственную функцию навигации хлебных крошек в WordPress и даже делали отдельные надстройки для работы с таксономиями. А вот в WooCommerce уже есть функция woocommerce_breadcrumb()
по умолчанию.
Также у меня на сайте есть видеоурок, в котором мы настраивали навигацию хлебными крошками WooCommerce во время создания страницы каталога товаров.
Сама функция:
woocommerce_breadcrumb( $args = array() )
Функция уже имеет некоторые параметры, которые возможно передать в необязательный массив $args
.
delimiter
– символ, который будет разделять отдельные ссылки в хлебных крошках, по умолчанию это /
,wrap_before
– что добавить перед блоком хлебных крошек, по умолчанию – <nav class="woocommerce-breadcrumb">
wrap_after
– что добавить после, по умолчанию – </nav>
before
– HTML для вывода перед ссылкой навигации крошек,after
– HTML для вывода после ссылки навигации крошек,home
– текст ссылки на главную, по умолчанию – _x( 'Home', 'breadcrumb', 'woocommerce' )
, если ничего не указать, то первая ссылка, ведущая на главную, отображаться не будет.Этот код вставляется непосредственно в то место в коде, где вы хотите вывести хлебные крошки.
$args = array( 'delimiter' => '→' // меняем разделитель ); woocommerce_breadcrumb( $args );
Так, стоп, а где параметр типо echo
? Что, если я не хочу выводить их, а нужно именно записать результат действия функции в переменную?
Легко:
ob_start(); // включаем буферизацию $args = array( 'delimiter' => '→' // меняем разделитель ); woocommerce_breadcrumb( $args ); $breadcrumbs = ob_get_contents(); // всё, что вывели, записываем в переменную ob_end_clean(); // очищаем буфер
Каждый раз, говоря про хуки в WordPress, я не устаю напоминать, как их использовать. Если тема не обновляется – отправляем смело код в functions.php
темы, если обновляется, то нужно создать либо дочернюю тему либо отдельный плагин для вашего кода.
Кстати говоря, используя тему Storefront, добавляйте приоритет выполнения хука как минимум 20
.
Вообще, если коротко, суть хука woocommerce_breadcrumb_default
в том, что мы можете легко поменять любые параметры, упомянутые выше, никак не изменяя вывод функции в файлах темы.
А ниже – конкретные примеры.
Тут важное замечание, что если в массиве $defaults
параметр home
не присутствует, либо равен пустой строке, то ссылка на главную магическим образом исчезает из хлебных крошек.
add_filter( 'woocommerce_breadcrumb_defaults', 'true_woo_breadcrumbs_home' ); function true_woo_breadcrumbs_home( $defaults ) { $defaults[ 'home' ] = 'Супер интернет-магазин'; // либо $defaults[ 'home' ] = '' и ссылка на главную выводиться не будет return $defaults; }
Например на стрелку:
Тогда вам пригодится код:
add_filter( 'woocommerce_breadcrumb_defaults', 'true_woo_breadcrumbs_delimiter' ); function true_woo_breadcrumbs_delimiter( $defaults ) { $defaults[ 'delimiter' ] = ' → '; // меняем на неразрывные пробелы со стрелкой return $defaults; }
Этот фильтр хук позволит изменить, куда должна ссылать первая ссылка хлебных крох, та, которая по идее ведёт на главную страницу сайта.
add_filter( 'woocommerce_breadcrumb_home_url', 'true_woo_breadcrumbs_home_url' ); function true_woo_breadcrumbs_home_url() { return 'https://misha.agency'; }
Так, а тут есть несколько моментов. Вам нужно понимать, что хлебные крошки отключаются не через плагин, а через тему.
Объясню, что это значит. Темы могут создаваться для разных сайтов и для разных целей:
woocommerce_before_main_content
.Тогда код отключения хлебных крошек, не трогая файлы оригинальной темы, будет таким:
add_action( 'init', 'true_woo_no_breadcrumbs' ); function true_woo_no_breadcrumbs() { remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 ); }
Но слишком наивно предполагать, что все разработчики тем придерживаются этого, вполне возможно, что вы вообще не сможете отключить хлебные крошки в какой-то теме и будете использовать display:none
, но желаю вам удачи.
Один из нестандартных вариантов – тема Storefront, но там это ещё можно сделать хуком:
add_action( 'init', 'true_woo_no_breadcrumbs_storefront' ); function true_woo_no_breadcrumbs_storefront() { remove_action( 'storefront_before_content', 'woocommerce_breadcrumb', 10 ); }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый вечер! Подскажите если есть хлебные крошки yoast se, хлебные крошки woocommerce удалить
Здравствуйте. В метках товаров woocommerce к хлебным крошкам добавляется фраза "Товары с меткой..." Как бы убрать эту фразу?
Спасибо! Твой блог просто лучший на просторах рунета по готовым решениям.
Может еще тема заинтересует. Есть магазин где товарам присваивается 2+ категории. Одна из категорий для внутренней сортировки в админке (для партнеров), а остальные для фронта. И WP+WC сортирует категории по id, из-за чего на фронте выводится не всегда нужная категория, а та у которой меньше порядковый номер id. Есть ли вариант как то поменять порядок сортировки или еще лучше, что бы работала настройка "Основная категория" при заполнении товара? Гугление дало другое решение, прям хорошее как по мне, но меня поразила базовая странная сортировка.
Решение (с форума WP) вставляется в файл breadcrumb.php:
Код вставить после:
echo $wrap_before;
Забыл указать, что при формировании хлебных крошек подставляются не те категории.
Привет и спасибо большое!!
Периодически встречал у разных клиентов плагины, которые позволяют задавать основную категорию (и не только для WooCommerce), не запомнил, какие, но один такой плагин – это yoast seo.
Решение, которое ты нашёл, кстати действительно интересное: берём ярлык категории, к которой присвоен пост из URL и используем её. Единственное, по возможности я бы избежал изменения непосредственно
breadcrumb.php
, это при помощи фильтра вероятнее всего получится сделать.На самом деле много всего интересного есть в файле
class-wc-breadcrumb.php
.Во-первых, параметры сортировки, передаваемые в функцию
wc_get_product_terms()
проходят через фильтрwoocommerce_breadcrumb_product_terms_args
.Можем изменить их:
Во-вторых, уже после получения категорий этой функцией, срабатывает ещё один фильтр, который позволяет переопределить главную категорию
woocommerce_breadcrumb_main_term
.Например:
И в качестве ответа на твой вопрос "почему сортировка происходит именно так", то всё кроется в том, что функция работает на основе get_terms(), а выше ты возможно увидел параметр сортировки
parent
, он описан как раз здесь.Здраствуйте!
возможно Вы подскажете такой вопрос:
Как удалить из крошек страницу “Магазин” WooCommerce
Home / Магазин / Категория / Товар
Home – /
Магазин – /shop/ – главная страница магазина WooCommerce.
* * *
плагин WooCommerce не позволяет назначить главную страницу сайта одновременно и главной страницей магазина. Я пробовал.
WooCommerce — Настройки
/wp-admin/admin.php?page=wc-settings
Страница Магазина – “Магазин”
Если магазин используется как дополнение к блогу, то страница “Магазин” нужна. Это логично. “Home”=”Blog”
Если магазин используется как освновной движок сайта – то страница “Магазин” НЕ нужна. Не логично.
* * *
Я использую плагин “WooCommerce-Breadcrumbs” https://ru.wordpress.org/plugins/woocommerce-breadcrumbs/ и соответственно функцию woocommerce_breadcrumb() для создания хлебных крошек.
В плагине “WooCommerce-Breadcrumbs” можно менять настройки
Настройки — WC Breadcrumbs
/wp-admin/options-general.php?page=woocommerce-breadcrumbs
Можно задать “Home text” и “Home URL” для главной страницы сайта. Но нет опции для главной страницы магазина.
Плагин “WooCommerce-Breadcrumbs” не позволяет удалить из крошек эту ссылку "Магазин – /shop/".
Я уже спросил у разработчика тут https://wordpress.org/support/topic/how-to-remove-woocommerce-main-shop-page-from-breadcrumbs/
Автор плагина Anthony Hortin
(@ahortin)
Привет,
Этот плагин не позволит вам изменить содержимое хлебных крошек WooCommerce. Этот плагин позволит вам только изменить стиль хлебных крошек WooCommerce, позволяя вам изменить HTML, окружающий ваши хлебные крошки. Это также позволяет вам полностью включать или выключать хлебные крошки. Этот плагин не предназначен для того, чтобы вы могли изменить, какие «крошки» (то есть ссылки) включены в настоящие хлебные крошки.
Я разобрался с этим вопросом. Оказывается WP делает крошки не только на основе "Категория-Подкатегория-Товар" но и также на основе урлов страниц.
например если "главная страница магазина" /shop/ а дополнительный слуг товара тоже /shop/ (товар - /shop/televizor-samsung-ue22h5600/ ) то "главная страница магазина" становится в хлебные крошки между "Главная" и "Категория".
Надо сделать для "главная страница магазина" просто другой слуг и она исчезнет из хлебных крошек.
Супер! Прошу прощения, что не ответил, слишком много всяких задач сейчас