You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Divi WooCommerce WordPress商店页面实现Masonry布局?

解决WooCommerce商店页面Masonry布局的方案

嘿,我刚好之前帮客户处理过类似的需求,给你几个实用的方案,不管是用插件还是自定义代码都能搞定:

一、直接用插件(适合新手,快速见效)

  • WooCommerce Product Grid/List Layout:这款插件专门针对商品布局,内置Masonry网格选项,你只需要在插件设置里开启Masonry模式,就能调整列数、间距、响应式规则,完全不用碰代码,上手超简单。
  • YITH WooCommerce Product Gallery & Image Zoom:你之前已经熟悉它的相册功能了,其实它也支持商店页面的Masonry商品布局,在插件的「Shop Page」设置项里就能找到开启开关,无缝衔接你已有的操作习惯。
  • Gridable – WooCommerce Grid Builder:如果需要更灵活的布局(比如混合不同尺寸的商品卡片),这个插件的拖拽式编辑器能让你轻松搭建自定义Masonry布局,还能搭配筛选、排序功能一起用。

二、自定义代码实现(适合不想装太多插件的场景)

如果你的主题本身支持自定义代码,或者你想更灵活控制布局,可以试试这个方法:

1. 加载Masonry脚本

在你的子主题functions.php里添加以下代码(注意:一定要用子主题,避免主题更新丢失修改;或者用Code Snippets插件来添加更安全):

function enqueue_woocommerce_masonry() {
    // 只在商店页面和商品分类页面加载
    if ( is_shop() || is_product_category() ) {
        // 加载WordPress自带的Masonry脚本
        wp_enqueue_script( 'masonry' );
        // 初始化Masonry布局
        wp_add_inline_script( 'masonry', '
            jQuery(document).ready(function($){
                // 替换为你主题中商品列表的容器类名,大部分主题是.products
                const $grid = $(".products").masonry({
                    itemSelector: ".product", // 商品卡片的类名
                    percentPosition: true,
                    gutter: 15 // 商品间距,可调整
                });
                // 图片加载完成后重新布局,避免错位
                $grid.imagesLoaded().progress( function() {
                    $grid.masonry("layout");
                });
            });
        ' );
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_woocommerce_masonry' );

2. 调整CSS样式

在主题的自定义CSS里添加以下样式,确保商品卡片自适应布局:

.woocommerce .products {
    margin: 0 -7.5px; /* 抵消gutter的间距 */
}
.woocommerce .products .product {
    width: calc(33.333% - 15px); /* 三列布局,可根据需求改成25%(四列)或50%(两列) */
    margin: 0 7.5px 15px; /* 上下左右间距 */
    float: none; /* 取消默认浮动,避免Masonry冲突 */
}
/* 响应式适配 */
@media (max-width: 768px) {
    .woocommerce .products .product {
        width: calc(50% - 15px); /* 移动端两列 */
    }
}
@media (max-width: 480px) {
    .woocommerce .products .product {
        width: 100%; /* 移动端单列 */
    }
}

注意事项

  • 不同主题的商品列表类名可能不一样,比如有些主题用.woocommerce-products-loop代替.products,你可以通过浏览器的开发者工具(F12)查看页面元素来确认正确的类名。
  • 如果出现布局错位,大概率是图片加载延迟导致的,代码里已经加了imagesLoaded的处理,一般能解决这个问题。

内容的提问来源于stack exchange,提问作者Jotan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:58:46