#php #wordpress #woocommerce #breadcrumbs
#php #wordpress #woocommerce #breadcrumbs
Вопрос:
Я использую следующую функцию, чтобы удалить название продукта из breadcrumbs, отображаемых на странице продукта:
add_filter( 'woocommerce_get_breadcrumb', 'ed_change_breadcrumb' );
function ed_change_breadcrumb( $breadcrumb ) {
if(is_singular()){
array_pop($breadcrumb);
}
return $breadcrumb;
}
Это работает в том смысле, что удаляет заголовок, но также не позволяет последней категории / подкатегории быть гиперссылкой. Как я могу это исправить?
Например:
-
Оригинальный breadcrumb
<a>
Главная страница</a>
/<a>
Категория</a>
/<a>
Подкатегория</a>
/ Название продукта -
Результат вышеупомянутой функции
<a>
Главная страница</a>
/<a>
Категория</a>
/ Подкатегория
Мне нужно, чтобы подкатегория оставалась доступной для просмотра после удаления названия продукта из breadcrumbs.
Спасибо
Ответ №1:
Ваш код работает, но последний элемент в breadcrumbs никогда не содержит ссылки через код, используемый в global/breadcrumb.php
файле шаблона в строке 34
- Этот шаблон можно переопределить, скопировав его в
yourtheme/woocommerce/global/breadcrumb.php
.
Таким образом, вы можете удалить свой фильтр-хук и применить следующий код в файле шаблона, чтобы он предоставлял ссылку на последний элемент, когда is_product()
значение true
Примечание: is_product()
— Возвращает true на одной странице продукта. Оболочка для is_singular()
Заменить
if ( ! empty( $breadcrumb ) ) {
echo $wrap_before;
foreach ( $breadcrumb as $key => $crumb ) {
echo $before;
if ( ! empty( $crumb[1] ) amp;amp; 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 ( ! empty( $breadcrumb ) ) {
echo $wrap_before;
foreach ( $breadcrumb as $key => $crumb ) {
echo $before;
if ( ! empty( $crumb[1] ) amp;amp; sizeof( $breadcrumb ) !== $key 1 ) {
echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>';
} else {
if ( is_product() ) {
unset($crumb);
} else {
echo esc_html( $crumb[0] );
}
}
echo $after;
if ( sizeof( $breadcrumb ) !== $key 1 ) {
if ( is_product() amp;amp; sizeof( $breadcrumb ) == $key 2 ) {
echo '';
} else {
echo $delimiter;
}
}
}
echo $wrap_after;
}