WooCommerce - 从面包屑中删除产品标题,但保留所有类别超链接

Lya*_*all 2 php wordpress breadcrumbs woocommerce

我使用以下函数从产品页面上显示的面包屑中删除产品标题:

add_filter( 'woocommerce_get_breadcrumb', 'ed_change_breadcrumb' );

function ed_change_breadcrumb( $breadcrumb ) {
    
  if(is_singular()){
        array_pop($breadcrumb);
    }
  
  return $breadcrumb;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是它确实删除了标题,但它也阻止了最后一个类别/子类别成为超链接。我该如何解决这个问题?

例如:

  • 原始面包屑

    <a>首页</a>/<a>类别</a>/<a>子类别</a>/ 产品标题

  • 上述函数的结果

    <a>首页</a>/<a>类别</a>/ 子类别

从面包屑中删除产品标题后,我需要子类别仍然可单击。

谢谢

7uc*_*f3r 6

您的代码可以工作,但面包屑中的最后一个元素永远不会包含通过第34global/breadcrumb.php行模板文件中使用的代码的链接

  • 可以通过将其复制到 来覆盖此模板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;

}
Run Code Online (Sandbox Code Playgroud)

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;

}
Run Code Online (Sandbox Code Playgroud)