WordPress中显示指定页面上的商品总数(使用短代码实现)

11次阅读

WordPress中显示指定页面上的商品总数(使用短代码实现)

通过自定义短代码,可在任意页面精准插入“当前商品总数”动态文本,避免全局输出;只需将函数注册为短代码并在编辑器中调用即可,安全、灵活且不影响主题结构。

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。

通过该方式,你完全掌控显示位置、文案格式与上下文环境,真正实现「所见即所得」的动态数据嵌入。

text=ZqhQzanResources