
本文介绍如何通过自定义短代码,在 wcfm marketplace 的供应商店铺页面中,按 woocommerce 商品分类(如“蔬菜”“水果”)分组展示该供应商上架的所有商品,实现结构清晰、语义明确的分类陈列效果。
本文介绍如何通过自定义短代码,在 wcfm marketplace 的供应商店铺页面中,按 woocommerce 商品分类(如“蔬菜”“水果”)分组展示该供应商上架的所有商品,实现结构清晰、语义明确的分类陈列效果。
在 WooCommerce 搭配 WCFM Marketplace 插件构建的多供应商市场中,原生的供应商店铺页面(如 /store/vendor-name/)默认以时间或销量排序平铺所有商品,缺乏按分类组织的展示能力。而实际业务中,买家常需快速定位某类商品(例如“有机蔬菜”或“进口水果”),因此实现「按供应商自有分类分区块展示」是提升用户体验与转化率的关键优化点。
以下方案通过一个可复用的 WordPress 短代码 wcfm_store_related_products 实现该功能。它能自动识别当前页面上下文(店铺页、商品详情页等),精准获取供应商 ID,并动态遍历该供应商所售商品所属的所有分类,为每个分类生成对应的产品网格区块。
✅ 核心实现逻辑
- 自动适配多种上下文:支持在 WCFM 店铺主页、单个商品页、或其他自定义页面调用;
- 智能提取供应商 ID:优先从 URL slug 解析, fallback 到 post_author 或当前用户角色判断;
- 分类驱动渲染:虽示例代码中硬编码了 category="t-shirt",但实际应用中需扩展为动态遍历分类——这是本教程的重点增强部分。
?️ 增强版完整代码(推荐使用)
将以下代码添加至子主题的 functions.php 文件中:
add_shortcode('wcfm_store_products_by_category', 'wcfm_vendor_products_by_category');
function wcfm_vendor_products_by_category($attr) {
global $WCFM, $WCFMmp, $wp, $post;
// 步骤1:智能获取当前供应商ID
$vendor_id = 0;
if (wcfm_is_store_page()) {
$store_slug = get_query_var(get_option('wcfm_store_url', 'store'));
$vendor_user = get_user_by('slug', $store_slug);
$vendor_id = $vendor_user ? $vendor_user->ID : 0;
} elseif (is_product() && $post && $post->post_author) {
$vendor_id = $post->post_author;
} elseif (is_single() && $post && wcfm_is_vendor($post->post_author)) {
$vendor_id = $post->post_author;
}
if (!$vendor_id) return '<p class="notice notice-warning">无法识别供应商,请检查页面上下文。</p>';
// 步骤2:获取该供应商发布的所有商品分类(仅含有该供应商商品的分类)
$vendor_terms = get_terms([
'taxonomy' => 'product_cat',
'hide_empty' => true,
'meta_query' => [
[
'key' => '_wcfm_product_vendors',
'value' => '"' . $vendor_id . '"',
'compare' => 'LIKE'
]
]
]);
if (is_wp_error($vendor_terms) || empty($vendor_terms)) {
return '<p class="notice notice-info">该供应商暂未发布任何分类商品。</p>';
}
// 步骤3:为每个分类生成产品区块
$output = '';
foreach ($vendor_terms as $term) {
$output .= '<section class="wcfm-store-category-section" id="cat-' . $term->term_id . '">';
$output .= '<h3 class="store-category-title">' . esc_html($term->name) . '</h3>';
$output .= do_shortcode('[products category="' . $term->slug . '" store="' . $vendor_id . '" columns="4" limit="8"]');
$output .= '</section>';
}
return $output;
}✅ 使用方式
在店铺页面任意位置(如通过古腾堡「自定义HTML」区块、经典编辑器或页面模板)插入:
[wcfm_store_products_by_category]
? 提示:[products] 短代码由 WooCommerce 原生提供,支持 columns、limit、orderby 等参数,可灵活调整每行商品数与加载数量。
⚠️ 注意事项与最佳实践
- 必须启用 WCFM Marketplace 的“商品归属元数据”:确保插件已正确为每个商品写入 _wcfm_product_vendors 元字段(默认开启);
- 分类可见性控制:仅当某分类下存在该供应商的商品时,才会被列出,避免空分类干扰;
- 性能优化建议:若供应商商品量极大(>500),建议配合对象缓存(如 Redis)或使用 WP_Query 替代 do_shortcode() 以减少嵌套开销;
- 样式定制:可通过 CSS 类 .wcfm-store-category-section 和 .store-category-title 自定义标题样式与区块间距;
- 兼容性:适用于 WCFM Marketplace ≥ 3.5.0 + WooCommerce ≥ 6.0,PHP 7.4+。
通过以上实现,您即可在供应商店铺页呈现专业级的分类导购结构,既符合买家浏览习惯,也强化了供应商的品牌货架形象。










