如何解决WooCommerce-从面包屑中删除产品标题,但保留所有类别的超链接
我正在使用以下功能从产品页面上显示的面包屑中删除产品标题:
add_filter( 'woocommerce_get_breadcrumb','ed_change_breadcrumb' );
function ed_change_breadcrumb( $breadcrumb ) {
if(is_singular()){
array_pop($breadcrumb);
}
return $breadcrumb;
}
它的工作方式是删除标题,但同时也阻止最后一个类别/子类别成为超链接。我该如何解决?
例如:
-
原始面包屑
<a>
主页</a>
/<a>
类别</a>
/<a>
子类别</a>
/产品标题 -
上述功能的结果
<a>
主页</a>
/<a>
类别</a>
/子类别
从面包屑中删除产品标题后,我需要“子类别”仍可单击。
谢谢
解决方法
您的代码有效,但面包屑中的最后一个元素永远不会包含指向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] ) && 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] ) && 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() && sizeof( $breadcrumb ) == $key + 2 ) {
echo '';
} else {
echo $delimiter;
}
}
}
echo $wrap_after;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。