
本文介绍如何基于 WooCommerce 原生最近浏览功能,安全、准确地获取当前用户已浏览的商品数量,并封装为短代码 [recently_count] 供前端灵活调用。
本文介绍如何基于 woocommerce 原生最近浏览功能,安全、准确地获取当前用户已浏览的商品数量,并封装为短代码 `[recently_count]` 供前端灵活调用。
WooCommerce 默认通过 woocommerce_recently_viewed Cookie 存储用户最近浏览的商品 ID(以 | 分隔的字符串),但官方并未提供直接获取浏览总数的接口。要实现「显示浏览数量」这一常见需求(例如在页眉提示“您已浏览 5 件商品”),需手动解析该 Cookie 并统计有效商品数。
以下是一个健壮、安全、可复用的短代码实现:
/**
* 短代码 [recently_count]:返回当前用户最近浏览的商品数量
* 支持过滤(如限制最多显示 15 个)、空值防护与类型校验
*/
function dorzki_recently_viewed_count() {
// 检查 Cookie 是否存在且非空
if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) ) {
return '0';
}
// 安全解析 Cookie 字符串为整数数组(自动去重、过滤非数字)
$viewed_ids = wp_parse_id_list(
(array) explode( '|', wp_unslash( $_COOKIE['woocommerce_recently_viewed'] ) )
);
// 可选:限制计数上限(与追踪逻辑保持一致,如最多 15 个)
$max_count = apply_filters( 'dorzki_recently_viewed_max_count', 15 );
$count = min( count( $viewed_ids ), $max_count );
return (string) $count;
}
add_shortcode( 'recently_count', 'dorzki_recently_viewed_count' );
✅ 使用方式:
在任意文章、页面或支持短代码的区域插入:
您最近浏览了 [recently_count] 件商品。
⚠️ 关键注意事项:
- 不要用 count($ids):原答案中 count($ids) 是错误的——$ids 是字符串(如 "123,456,789"),count() 对字符串恒返回 1,会导致逻辑失效;
- 务必使用 count($viewed_ids):$viewed_ids 才是解析后的数组,其长度才是真实浏览数;
- Cookie 可能被禁用或清空:函数已内置空值防护,返回 '0' 而非报错;
- 性能友好:仅读取 Cookie、无数据库查询,适合高频调用;
- 可扩展性强:通过 dorzki_recently_viewed_max_count 过滤器可动态调整计数上限(例如在结账页只显示最近 3 个)。
? 进阶建议:
若需在 JavaScript 中读取该数值(如更新徽章),可配合 wp_localize_script() 将 $_COOKIE['woocommerce_recently_viewed'] 解析结果传递至前端,避免重复解析。
至此,你已拥有了一个轻量、可靠、符合 WooCommerce 最佳实践的浏览计数方案。










