WooCommerce:从 Yoast 面包屑中删除 "Products" 存档

WooCommerce: Remove "Products" archive from Yoast breadcrumbs

我想删除 link 到所有页面面包屑中的产品存档。

为此,我在 Yoast 文档中找到了解决方案。除了在产品页面上,它工作正常。 这是我当前的代码:

/* Remove "Products" from Yoast SEO breadcrumbs in WooCommerce */
add_filter( 'wpseo_breadcrumb_links', function( $links ) {

    // Check if we're on a WooCommerce page
    // Checks if key 'ptarchive' is set
    // Checks if 'product' is the value of the key 'ptarchive', in position 1 in the links array
    if ( is_woocommerce() && isset( $links[1]['ptarchive'] ) && 'product' === $links[1]['ptarchive'] ) {

        // True, remove 'Products' archive from breadcrumb links
        unset( $links[1] );

    // Added by me to remove it on product single pages - doesn't work!
    } elseif ( is_product() && isset( $links[1]['ptarchive'] ) && 'product' === $links[1]['ptarchive'] ) {

        // True, remove 'Products' archive from breadcrumb links
        unset( $links[1] );


    }

    // Rebase array keys
    $links = array_values( $links );

    // Return modified array
    return $links;

});

它删除了存档页面和所有其他 WooCommerce 页面上的 link,正如您所期望的条件标签 is_woocommerce()

但由于某些原因,它在单个产品页面上不起作用。 如您所见,如果我在带有 is_product() 的产品页面上,我会添加额外的检查。不幸的是,这不起作用。 is_singular('proudct') 也别担心。

也许 $links 数组有问题? 但我不确定如何检查。

我将 if 条件更改为:

if ( is_product() ) {
    // True, remove 'Products' archive from breadcrumb links
    unset( $links[1] );
}

现在可以了。其他页面之前没有这个功能也能正常工作。

您还可以删除商店页面上的 'shop' 或 'products' 链接,方法是添加“||” is_archive() ' 条件如下:

if ( is_product()  || is_archive() ) {
// True, remove 'Products' archive from breadcrumb links
    unset( $links[1] );
}