提问者:小点点

在我的WooCommerce相关产品小工具中排除特定类别


我所有的WooCommerce产品都被分配了两个类别。第一类称为“所有产品”,所有产品都得到分配。第二类是依赖于产品,可以是电影、书籍、工具等。

由于每个产品都被分配为“所有产品”类别,因此在产品页面上的related products小部件中,您可以看到每个产品,而不仅仅是第二个(更具体的)产品类别。

我试图在functions.php中添加一些代码,这些代码将忽略“All products”作为related products小部件的一个类别,但仍然显示分配了该产品的第二个类别的相关产品。

到目前为止,我有了这段代码,它将相关的产品部件全部隐藏在一起。我认为这是因为每个产品都分配了slug“all-products”,所以它删除了小部件,而不是计算产品分配的第二个类别。

add_filter( 'woocommerce_related_products', 'exclude_product_category_from_related_products', 10, 3 );
function exclude_product_category_from_related_products( $related_posts, $product_id, $args  ){
    // HERE define your product category slug
    $term_slug = 'all-products';

    // Get the product Ids in the defined product category
    $exclude_ids = wc_get_products( array(
        'status'    => 'publish',
        'limit'     => -1,
        'category'  => array($term_slug),
        'return'    => 'ids',
    ) );

    return array_diff( $related_posts, $exclude_ids );
}

我如何编辑这段代码,使它将隐藏'all-products'类别不显示在相关产品中,但仍然显示其他指定类别的相关产品?


共1个答案

匿名用户

您最好使用woocommerce_get_related_product_cat_terms。您可以使用此方法删除用于获取产品的类别数组中的'all-products'

add_filter( 'woocommerce_get_related_product_cat_terms', 'exclude_product_category_from_related_products' );
function exclude_product_category_from_related_products( $cats_array ) {

    $term = get_term_by('slug', 'all-products', 'product_cat');

    if ( $term && ($key = array_search($term->term_id, $cats_array)) !== false) {
        unset($cats_array[$key]);
    }

    return $cats_array;
}