从 Woocommerce 面包屑中删除 "Shop"

Remove "Shop" from Woocommerce breadcrumbs

我没有主商店页面,只有产品类别。 Woocommerce 面包屑总是在我需要删除的面包屑中显示 "Shop" 踪迹。在 Woo 文档中,我只能捏造有关如何更改 "home" 段塞或定界符,或如何完全删除面包屑的信息。我如何简单地删除 "Shop" 踪迹?

编辑:我不想 alter/change "shop" 路径的 name/link 但完全删除它!

要从 Woocommerce 面包屑中完全删除 "Shop",请使用以下命令:

add_filter( 'woocommerce_get_breadcrumb', 'remove_shop_crumb', 20, 2 );
function remove_shop_crumb( $crumbs, $breadcrumb ){
    foreach( $crumbs as $key => $crumb ){
        if( $crumb[0] === __('Shop', 'Woocommerce') ) {
            unset($crumbs[$key]);
        }
    }

    return $crumbs;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。

为了完全控制面包屑输出,我建议复制位于 --> plugins/woocommerce/global/breadcrumb.php 的文件 breadcrumb.php 放在 you-theme-folder/woocommerce/global/breadcrumb.php

我的默认面包屑导航如下所示: "Home » Shop » Home » Category » Subcategory » Product" 由于某种原因,家出现了两次。下面是 breadcrumb.php 中的代码,它显示了我如何删除 "Home" 和 "Shop"

的第一个外观
if ( ! empty( $breadcrumb ) ) {

echo $wrap_before;

foreach ( $breadcrumb as $key => $crumb ) {

    echo $before;

    //Every crumb have a $key which starts at 0 for the first crumb. 
    //Here I simply skip out of the loop for the first two crumbs. 
    //You can just echo the $key to see what number you need to remove. 
    if( $key === 0 || $key === 1 ){
        continue;
    }

    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 ' &raquo; ';
    }
}

echo $wrap_after;

}

要更改网址,只需在锚标签内为给定的 $key 或 crumb[0] 值设置一个新网址。 如果您只希望在商店的特定位置发生这种情况,只需使用 woocommerce 条件函数,例如:

if(is_product()){
    if( $key === 0 || $key === 1 ){
       continue;
    }
}

仅在单个产品页面上删除前两个面包屑。在 https://docs.woocommerce.com/document/conditional-tags/

查看更多

这段代码更简单:

add_filter('woocommerce_get_breadcrumb', 'remove_breadcrumb_home');

function remove_breadcrumb_home( $breadcrumb )
{
    array_shift($breadcrumb);
    return $breadcrumb;
}

这对我有用,看起来 woocommerce 考虑了 crumbs 数组中的索引。

add_filter('woocommerce_get_breadcrumb', 'remove_shop_crumb', 20, 2);
function remove_shop_crumb($crumbs, $breadcrumb)
{
    $new_crumbs = array();
    foreach ($crumbs as $key => $crumb) {
        if ($crumb[0] !== __('Shop', 'Woocommerce')) {
            $new_crumbs[] = $crumb;
        }
    }
    return $new_crumbs;
}

我希望这对某人有所帮助 谢谢

这段代码对我有用 它改变了 JSON yoast seo

上次测试:WordPress 5.8 上的 Yoast SEO 16.9

add_filter( 'wpseo_breadcrumb_links' ,'wpseo_remove_breadcrumb_link', 10 );

function wpseo_remove_breadcrumb_link( $links ){
    // Remove all breadcrumbs that have the text: Shop.
    $new_links = array_filter( $links, function ( $link ) { return $link['text'] !== 'Shop'; } );
 
    // Reset array keys.
    return array_values( $new_links );
}