Cтандартные крошки woocommerce прекрасно работают только если товар находится в одной категории. Если же товар находится в нескольких категориях, то крошки выводят не основную категорию (назначенную в админке) а первую.
В WooCommerce есть шаблон вывода хлебных крошек. Расположен он тут: wp-content/plugins/woocommerce/templates/global/breadcrumb.php. Этот файл надо скопировать в wp-content/themes/моя-тема/woocommerce/breadcrumb.php и отредактировать. Сам код в breadcrumps.php очень простой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! empty( $breadcrumb ) ) { echo $wrap_before; foreach ( $breadcrumb as $key => $crumb ) { echo $before; if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) { echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[] ) . '</a>'; } else { echo esc_html( $crumb[] ); } echo $after; if ( sizeof( $breadcrumb ) !== $key + 1 ) { echo $delimiter; } } echo $wrap_after; } |
Однако в самом WooCommerce отсутствуют такие понятия, как основная (или первичная категория). Возможность задания первичной категории для товара появляется только после установки Yoast SEO. Вывод «хлебных крошек» в стиле yoast с указанием первичной категории нужно делать с помощью функции yoast_breadcrumps(). При этом в коде breadcrumb.php надо удалить или закомментировать имеющееся и добавить вызов yoast_breadcrumps():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! empty( $breadcrumb ) ) { /* echo $wrap_before; foreach ( $breadcrumb as $key => $crumb ) { echo $before; if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) { echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>'; } else { echo esc_html( $crumb[0] ); } echo $after; if ( sizeof( $breadcrumb ) !== $key + 1 ) { echo $delimiter; } } echo $wrap_after; */ if ( function_exists('yoast_breadcrumb') ) { $ybc = yoast_breadcrumb('<p id="breadcrumbs">','</p>', false); $arr = explode('»', $ybc); $ybc = $arr[] . '»' . $arr[2]; echo $ybc; } } |
Чтобы использовать любой разделитель, нужно выделять его вместе с пробелами:
1 2 3 4 5 6 7 8 9 10 11 |
if ( function_exists('yoast_breadcrumb') ) { $ybc = yoast_breadcrumb('<p id="breadcrumbs">','</p>', false); $delim = ' » '; $arr = explode($delim, $ybc); $ybc = trim($arr[]); for ($i = 2; $i < count($arr); $i++) { $ybc = $ybc . $delim . trim($arr[$i]); } echo $ybc; } |