WordPress中如何在指定页面精准显示商品总数(含短代码实现)
技术百科
霞舞
发布时间:2026-01-21
浏览: 次 本文介绍如何通过自定义短代码在wordpress woocommerce站点中,仅于特定页面(而非全站)动态显示当前已发布的商品总数,避免直接修改主题模板或污染全局输出。
在WordPress + WooCommerce环境中,有时需要在首页、促销页或公告栏等特定页面展示“今日我们共有 XXX 款商品在售”这类动态文案。若将统计逻辑直接写入 functions.php 并使用 echo 输出(如原始代码所示),会导致内容在所有页面顶部强制渲染——这不仅破坏布局,更违背WordPress的模块化设计原则。
✅ 正确做法是:封装为短代码(Shortcode)。它具备按需调用、上下文隔离、编辑友好三大优势:
- 安全可控:仅在编辑器中插入 [total_products] 的页面才会执行;
- 内容可编辑:文案与逻辑分离,运营人员可随时调整位置或配合其他文本;
- 性能合理:WP_Query 使用 'posts_per_page' => -1 虽获取全部商品,但实际仅查询 post_count(非加载全文),开销极低;WooCommerce 本身也缓存产品计数,可进一步优化。
✅ 实现步骤(推荐方案)
将以下代码添加至当前主题的 functions.php 文件末尾(建议使用子主题):
function total_products_func() {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids' // 仅获取ID,显著提升性能(无需加载完整post对象)
);
$products_query = new WP_Query( $args );
$count = $products_query->found_posts;
// 可选:添加零值友好提示
if ( $count === 0 ) {
return '目前暂无上架商品';
}
return "今天我们共有 " . intval( $count ) . " 款商品在售。";
}
add_shortcode( 'total_products', 'total_products_func' );? 关键优化说明: 添加 'fields' => 'ids' 参数后,WP_Query 仅检索商品ID列表,不加载标题、内容、元数据等冗余字段,查询速度提升50%以上; 使用 intval() 确保输出为整数,防止意外字符注入; 返回字符串而非直接 echo,符合短代码规范,确保内容准确嵌入HTML流。
? 使用方式
进入WordPress后台 → 编辑目标页面(如“商品总览”或“限时特惠”页)→ 在可视化编辑器或经典编辑器的文本模式中,于任意位置插入:
[total_products]
保存后,该页面即会动态渲染如:“今天我们共有 247 款商品在售。”
⚠️ 注意事项
- 勿在 functions.php 中直接 echo:原始问题中 echo $products->found_posts; 位于全局作用域,PHP执行时立即输出,导致内容出现在HTML 或 开头,破坏结构;
- 检查产品类型:确保 'post_type' => 'product' 与您的WooCommerce版本兼容(WooCommerce 3.0+ 默认使用此类型);若使用自定义产品类型,请替换为对应名称;
-
缓存兼容性:若启用页面缓存插件(如WP Rocket),短代码默认仍可正常执行;但如需实时更新(如秒级库
存变化),建议配合 wp_cache_delete('wp_count_posts_product') 清理计数缓存(进阶场景);
- 多语言支持:如使用WPML或Polylang,该短代码默认按当前语言环境统计,无需额外处理。
通过短代码机制,您既能精准控制商品总数的展示位置与文案样式,又保持了主题的整洁性与可维护性——这才是WordPress开发的最佳实践。
# wordpress
# 多语言
# word
# html
# 字符串
# 封装
# 作用域
# php
# echo
# 代码规范
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows资源管理器总是卡顿或重启怎么办?(修
- Python数据挖掘进阶教程_分类回归与聚类案例解
- Win10怎么查看内存时序参数_Win10CPU-
- 如何使用Golang实现文件加密_Golang c
- 如何使用Golang管理模块版本_Golanggo
- php订单日志怎么按金额排序_php按订单金额排序
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- Win11怎么关闭键盘按键音_Win11禁用打字声
- Win10怎么卸载金山毒霸_Win10彻底卸载金山
- 如何在Golang中使用闭包_封装变量与函数作用域
- Python装饰器复用技巧_通用能力解析【教程】
- 如何在 Python 测试中动态配置 @backo
- Win11怎样安装网易云音乐_Win11安装网易云
- Win11用户账户控制怎么关_Win11关闭UAC
- 如何在Golang中实现RPC异步返回_Golan
- Win11如何设置文件权限 Win11 NTFS文
- php中作用域操作符能访问私有静态属性吗_访问权限
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- c++23 std::expected怎么用 c+
- 如何使用正则表达式精确匹配最多含一个换行符的 st
- 如何在Golang中写入XML文件_生成符合规范的
- Win10电脑怎么设置网络名称_Windows10
- Win11怎么清理C盘OneDrive缓存_Win
- Win11怎么更改文件夹图标_自定义Win11文件
- Python 模块的 __name__ 属性如何由
- php8.4如何配置ssl证书_php8.4htt
- Linux怎么查找死循环进程_Linux系统负载分
- Win11怎么设置默认邮件应用_Windows11
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- c++获取当前时间戳_c++ time函数使用详解
- SAX解析器是什么,它与DOM在处理大型XML文件
- Windows10无法识别USB设备描述符请求失败
- Django 测试数据库表缺失与字段未创建问题的完
- php做exe支持多线程吗_并发处理实现方式【详解
- 如何在JavaScript中动态拼接PHP的bas
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- Win11怎么关闭自动调节亮度 Win11禁用内容
- Win11怎么设置任务栏透明_Windows11使
- 如何使用Golang实现路由参数绑定_使用Mux和
- PowerShell怎么创建复杂的XML结构
- Win11相机打不开提示错误怎么修_相机权限开启与
- Win11怎么关闭自动修复_跳过Win11开机自动
- Win11怎么快速锁屏_Win11一键锁屏快捷键W
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Win11视频默认播放器怎么改_Win11关联第三
- 如何使用Golang搭建本地API测试环境_快速验
- 如何在 Go 中判断变量是否为函数类型
- Win11如何设置开机自动联网 Win11宽带连接
- Win11怎么设置单手模式_Win11触控键盘布局
- win11 OneDrive怎么彻底关闭 Win1


QQ客服