
本文介绍如何在wordpress woocommerce站点中,仅在特定页面(而非全站)显示当前已发布商品的总数,并支持自定义文案,通过短代码实现灵活、安全、可复用的嵌入方式。
在WordPress + WooCommerce环境中,直接在主题文件(如functions.php)中使用echo输出产品总数会导致内容全局渲染(例如出现在页眉左上角),这既不美观也不符合需求。正确做法是将统计逻辑封装为短代码(Shortcode),从而实现“按需调用、精准定位”。
✅ 推荐方案:创建自定义短代码
将以下代码添加到当前子主题的 functions.php 文件末尾(切勿修改父主题或直接编辑wp-includes等核心文件):
function total_products_func() {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids' // 仅获取ID,大幅提升性能(避免加载完整对象)
);
$products_query = new WP_Query($args);
$total_count = $products_query->found_posts;
wp_reset_postdata(); // 重置主查询,防止影响后续循环
return sprintf(
'Today we have a total of %d products in our database.',
intval($total_count)
);
}
add_shortcode('total_products', 'total_products_func');? 关键优化说明: 使用 'fields' => 'ids' 显著减少数据库负载,尤其当商品数量庞大时; wp_reset_postdata() 确保短代码执行后不影响页面其他内容(如文章列表、侧边栏); sprintf() + intval() 提升安全性与可读性,防止非数字输出。
? 使用方法
进入WordPress后台 → 编辑你希望显示计数的特定页面(Page) → 在古腾堡编辑器中添加「自定义HTML」区块,或在经典编辑器中直接输入:
[total_products]
保存并刷新页面,即可看到类似效果:
Today we have a total of 42 products in our database.
⚠️ 注意事项
- 确保已安装并启用 WooCommerce 插件(product 自定义文章类型由其注册);
- 若使用缓存插件(如WP Super Cache、LiteSpeed Cache),请清空缓存或为该页面设置“不缓存”规则,否则计数可能不会实时更新;
- 如需在模板文件(如 page-product-stats.php)中调用,可使用 do_shortcode('[total_products]');
- 避免在 functions.php 中直接 echo,否则会破坏WordPress输出缓冲机制,导致布局错乱或HTTP头错误。
✅ 进阶建议(可选)
如需支持多语言,可结合 __() 函数实现翻译:
return sprintf(
__('Today we have a total of %d products in our database.', 'your-textdomain'),
intval($total_count)
);并确保主题已正确加载翻译文件。
通过短代码方式,你完全掌控展示位置、时机与文案,兼顾性能、可维护性与用户体验——这才是WordPress专业开发的最佳实践。










