WooCommerce主题开发:单产品页展示同供应商分类产品轮播
实现WooCommerce单个产品页显示同一供应商分类的产品轮播
我来帮你搞定这个需求,其实实现起来分几步就好,下面是具体的方案,你可以根据自己的主题结构调整:
1. 确认供应商分类的Slug
首先你要明确自己的供应商分类的分类别名(slug),假设你的供应商分类slug是suppliers(如果不是,记得替换成你实际的分类slug)。
2. 在单个产品页插入轮播代码
推荐用WooCommerce的钩子来实现,不用直接修改主题模板文件(避免主题更新丢失代码),把以下代码添加到子主题的functions.php文件里:
add_action('woocommerce_after_single_product_summary', 'display_supplier_products_carousel', 25); function display_supplier_products_carousel() { global $product; // 获取当前产品关联的供应商分类 $supplier_terms = get_the_terms($product->get_id(), 'suppliers'); // 替换成你的供应商分类slug if (!$supplier_terms || is_wp_error($supplier_terms)) { return; // 若产品未分配供应商分类,直接跳过不显示轮播 } $supplier_term = reset($supplier_terms); // 取第一个关联的供应商分类(假设一个产品只属于一个供应商) $supplier_id = $supplier_term->term_id; // 查询该供应商分类下的其他产品,排除当前正在查看的产品 $args = array( 'post_type' => 'product', 'posts_per_page' => 6, // 轮播显示的产品数量,可自行调整 'post__not_in' => array($product->get_id()), 'tax_query' => array( array( 'taxonomy' => 'suppliers', // 替换成你的供应商分类slug 'field' => 'term_id', 'terms' => $supplier_id, ), ), 'orderby' => 'rand', // 随机排序,也可改为date(按发布时间)等规则 ); $supplier_products = new WP_Query($args); if ($supplier_products->have_posts()) : ?> <div class="supplier-products-carousel"> <h2>来自<?php echo esc_html($supplier_term->name); ?>的其他产品</h2> <div class="carousel-items"> <?php while ($supplier_products->have_posts()) : $supplier_products->the_post(); ?> <div class="carousel-item"> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail('woocommerce_thumbnail'); ?> <h3><?php the_title(); ?></h3> <?php wc_get_template_part('loop/price'); ?> </a> </div> <?php endwhile; ?> </div> </div> <?php wp_reset_postdata(); // 重置查询,避免影响后续内容 endif; }
3. 给列表添加轮播功能
上面的代码只是输出了产品列表,要做成轮播还需要添加样式和JS。这里用常用的Slick轮播库来实现:
引入Slick资源(如果主题未自带)
继续在子主题functions.php里添加:
add_action('wp_enqueue_scripts', 'enqueue_slick_scripts'); function enqueue_slick_scripts() { if (is_product()) { // 仅在单个产品页加载资源 wp_enqueue_style('slick-css', 'https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css'); wp_enqueue_style('slick-theme-css', 'https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css'); wp_enqueue_script('slick-js', 'https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js', array('jquery'), '1.8.1', true); } }
初始化轮播
同样在functions.php里添加初始化代码:
add_action('wp_footer', 'init_supplier_carousel'); function init_supplier_carousel() { if (is_product()) { ?> <script> jQuery(document).ready(function($) { $('.supplier-products-carousel .carousel-items').slick({ slidesToShow: 3, // 桌面端一次显示3个产品 slidesToScroll: 1, autoplay: true, autoplaySpeed: 3000, arrows: true, dots: false, // 响应式设置,适配移动端 responsive: [ { breakpoint: 768, settings: { slidesToShow: 2 } }, { breakpoint: 480, settings: { slidesToShow: 1 } } ] }); }); </script> <?php } }
4. 自定义样式适配主题
可以根据自己的主题风格,在子主题的style.css里添加样式调整:
.supplier-products-carousel { margin: 40px 0; padding: 0 15px; } .supplier-products-carousel h2 { margin-bottom: 20px; text-align: center; font-size: 20px; } .carousel-item { margin: 0 10px; text-align: center; } .carousel-item img { margin-bottom: 10px; width: 100%; height: auto; } .carousel-item h3 { font-size: 16px; margin-bottom: 5px; }
注意事项
- 务必把代码中的
suppliers替换成你实际的供应商分类slug(在WP后台“产品-分类”里可以查看)。 - 如果你的产品可能属于多个供应商分类,可以修改代码中的
reset($supplier_terms)部分,改成遍历所有关联的供应商分类并展示对应产品。 - 推荐使用子主题修改代码,避免主题更新时丢失自定义内容。
内容的提问来源于stack exchange,提问作者user2795540
相关产品推荐
相关产品推荐

