
通过自定义短代码,可在任意页面精准插入“当前商品总数”动态文本,避免全局输出;只需将函数注册为短代码并在编辑器中调用即可,安全、灵活且不影响主题结构。
在 wordPress 网站中,尤其是使用 WooCommerce 构建的在线商店,经常需要在特定页面(如首页、促销页或关于页面)动态展示当前已上架的商品总数,例如:“Today we have a total of 247 products in our database”。但若直接将查询逻辑写入 functions.php 并使用 echo 输出,会导致内容强制渲染在页面顶部(通常是
起始处),破坏布局且无法控制显示位置。
推荐解决方案:使用自定义短代码(Shortcode)
短代码机制专为「按需、可控、可复用」的内容注入而设计,完美契合本需求。以下是完整实现步骤:
✅ 1. 注册短代码函数(添加至主题的 functions.php)
function total_products_func() { $args = array( 'post_type' => 'product', // 确保为 WooCommerce 默认产品类型 '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.', (int) $total_count ); } add_shortcode( 'total_products', 'total_products_func' );
? 关键优化说明:
- 使用 ‘fields’ => ‘ids’ 显著提升性能,避免加载冗余的 post 对象数据;
- wp_reset_postdata() 是必要操作,确保短代码执行后不影响页面其他区域的 wordpress 查询;
- sprintf() 和 (int) 强制类型转换增强安全性与可读性。
✅ 2. 在目标页面中调用短代码
进入 WordPress 后台 → 编辑所需页面(如“Shop Overview”)→ 在可视化或文本编辑器中任意位置插入:
[total_products]
保存后,该位置将动态渲染为:
Today we have a total of 186 products in our database.
⚠️ 注意事项:
- 若主题或插件禁用了短代码(如某些页面构建器默认过滤),请确认编辑器支持短代码解析(通常 Gutenberg 中需使用「短代码」区块);
- 如需兼容多语言站点,建议结合 __() 或 esc_html__() 进行国际化处理;
- 避免在循环内高频调用此短代码(如产品列表页每行都用),可考虑缓存总数(如使用 wp_cache_set/get)提升效率。
? 进阶提示:
如需在 PHP 模板文件(如 page-shop.php)中调用,可使用 do_shortcode(‘[total_products]’);若需纯数字(无文案),可另建短代码 total_products_count 并仅返回 $products_query->found_posts。
通过该方式,你完全掌控显示位置、文案格式与上下文环境,真正实现「所见即所得」的动态数据嵌入。