如何在WooCommerce 3中仅基于标签显示关联产品?
解决WooCommerce仅基于标签显示关联产品的问题
我完全懂你的困扰——只有「men」和「women」两个大类的话,默认的关联产品逻辑根本没法做到精准推荐,毕竟同个大类里的商品差异太大了。针对WooCommerce新版本(目前主流的7.x+版本都适用),我整理了一套有效的代码方案,你可以直接用:
实现步骤
你只需要把下面的代码添加到你的主题functions.php文件中,或者用代码片段插件(比如Code Snippets)来添加(更推荐后者,避免主题更新丢失修改):
// 仅基于标签获取WooCommerce关联产品 function custom_related_products_by_tags( $related_posts, $product_id, $args ) { // 获取当前产品的所有标签ID $tags = wp_get_post_terms( $product_id, 'product_tag', array( 'fields' => 'ids' ) ); if ( empty( $tags ) ) { return array(); // 无标签时不显示关联产品,可根据需求调整 } // 构建仅匹配标签的查询参数 $query_args = array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $args['posts_per_page'], // 沿用后台设置的显示数量 'post__not_in' => array( $product_id ), 'tax_query' => array( array( 'taxonomy' => 'product_tag', 'field' => 'term_id', 'terms' => $tags, 'operator' => 'IN', ), ), 'meta_query' => array( array( 'key' => '_visibility', 'value' => array( 'catalog', 'visible' ), 'compare' => 'IN', ), ), ); // 执行查询并提取产品ID $related_query = new WP_Query( $query_args ); $related_posts = wp_list_pluck( $related_query->posts, 'ID' ); return $related_posts; } add_filter( 'woocommerce_related_products', 'custom_related_products_by_tags', 10, 3 );
代码说明
- 这个代码用
woocommerce_related_products过滤器替换了默认的关联产品查询逻辑,是WooCommerce新版本官方支持的钩子,不会像旧代码那样失效。 - 它会先获取当前产品的所有标签,然后只筛选带有相同标签的产品,完全忽略类别因素。
- 如果你想调整关联产品的显示数量,直接在WooCommerce后台的WooCommerce > 设置 > 产品 > 显示里修改「关联产品」的数值即可,代码会自动同步这个设置。
- 如果某个产品没有设置标签,代码会让关联产品区域消失;如果想在这种情况下 fallback 到默认的类别关联逻辑,只需要把
return array();改成return $related_posts;就行。
内容的提问来源于stack exchange,提问作者Rudolfs
相关产品推荐
相关产品推荐

