WooCommerce:在单产品页展示同COLLECTION_ID属性的关联产品
在WooCommerce单个产品页展示同COLLECTION_ID的关联产品
没问题,这需求很常见,我给你一套靠谱的实现方案,直接用代码就能搞定,不用装额外插件。
第一步:确认属性设置前提
首先先确认下你的COLLECTION_ID产品属性是全局属性(不是产品自定义属性),并且所有需要关联的产品都已经正确设置了对应的属性值——这是后续代码生效的基础,如果是自定义属性的话,后面我会给你对应的调整方案。
第二步:添加核心功能代码
你可以把下面的代码添加到你的子主题functions.php文件里,或者用专门的代码片段插件(比如Code Snippets)来添加,这样能避免主题更新丢失代码:
add_action( 'woocommerce_after_single_product_summary', 'display_related_products_by_collection_id', 25 ); function display_related_products_by_collection_id() { global $product; // 获取当前产品的COLLECTION_ID属性值 $collection_id = $product->get_attribute('COLLECTION_ID'); // 如果当前产品没设置COLLECTION_ID,直接停止执行 if( empty($collection_id) ) return; // 设置查询参数,找同COLLECTION_ID的产品 $args = array( 'post_type' => 'product', 'posts_per_page' => 8, // 这里可以改你想显示的产品数量 'post__not_in' => array( $product->get_id() ), // 排除当前产品本身 'tax_query' => array( array( 'taxonomy' => 'pa_collection_id', // 注意:全局属性的分类法是pa_前缀+属性名小写 'field' => 'slug', 'terms' => sanitize_title($collection_id), // 转成slug格式匹配 ) ) ); $related_collection_products = new WP_Query( $args ); // 如果找到匹配的产品,就输出标题和产品列表 if( $related_collection_products->have_posts() ) { echo '<section class="related-collection-products">'; echo '<h2>同系列产品</h2>'; // 这个标题你可以随便改,比如"同系列精选" echo '<ul class="products columns-4">'; // columns-4是4列布局,改成和你主题一致的列数就行 while( $related_collection_products->have_posts() ) { $related_collection_products->the_post(); wc_get_template_part( 'content', 'product' ); // 用你主题自带的产品模板渲染,风格统一 } echo '</ul></section>'; wp_reset_postdata(); // 重置查询,避免影响后续内容 } }
关键参数说明
posts_per_page:控制显示多少个关联产品,按需调整数字就行。columns-4:产品列表的列数,比如你的主题用3列就改成columns-3,保证和主题布局统一。pa_collection_id:这里的pa_是WooCommerce全局属性的固定前缀,后面跟你的属性名小写,要是你属性名是Collection-ID,那这里就改成pa_collection-id,别写错了。
如果是自定义属性(非全局)的调整方案
要是你的COLLECTION_ID是产品自定义属性(不是全局属性),那上面的tax_query要改成meta_query,替换掉$args里的tax_query部分就行:
'meta_query' => array( array( 'key' => 'attribute_COLLECTION_ID', // 自定义属性的meta key是attribute_+属性名 'value' => $collection_id, 'compare' => '=' ) )
可选:样式微调
如果关联产品的布局和你主题不太搭,可以加一点自定义CSS来调整,比如:
.related-collection-products { margin: 40px 0; padding-top: 20px; border-top: 1px solid #eee; } .related-collection-products h2 { margin-bottom: 25px; font-size: 22px; text-align: center; } .related-collection-products .products { gap: 15px; }
把这段CSS加到主题的自定义CSS面板,或者子主题的style.css里就行。
内容的提问来源于stack exchange,提问作者Subhonkulov
相关产品推荐
相关产品推荐

