0

0

如何在WooCommerce中实现产品按浏览量排序

聖光之護

聖光之護

发布时间:2025-12-01 10:57:50

|

232人浏览过

|

来源于php中文网

原创

如何在woocommerce中实现产品按浏览量排序

本教程详细介绍了如何在WooCommerce中实现产品按浏览量排序。文章首先阐明了WordPress和WooCommerce默认不提供浏览量字段,因此需要通过自定义代码或插件来记录产品浏览量。接着,教程提供了具体的PHP代码示例,演示了如何为产品添加浏览量计数功能,并在此基础上,详细讲解了如何利用`WP_Query`的`meta_key`和`orderby`参数,将产品按照浏览量从高到低进行排序。文章还包含了重要的注意事项,以确保功能的正确性和性能。

1. 理解与实现产品浏览量计数

WordPress和WooCommerce核心功能本身并不直接提供“产品浏览量”这一字段供查询排序。因此,要实现按浏览量排序,我们首先需要一个机制来记录每个产品的浏览量。这通常通过在产品页面加载时更新一个自定义字段(post_meta)来实现。

方法一:通过自定义代码实现浏览量计数

您可以在主题的functions.php文件或自定义插件中添加以下代码来记录产品浏览量。这段代码会在每次产品单页被访问时,更新该产品的_product_views_count自定义字段。

/**
 * 设置产品浏览量计数
 * 
 * @param int $post_id 产品ID
 */
function set_product_views_count($post_id) {
    // 检查是否为产品类型且是单页
    if ( 'product' !== get_post_type($post_id) || !is_single($post_id) ) {
        return;
    }

    // 确保只在前端增加浏览量
    if ( is_admin() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
        return;
    }

    $count_key = '_product_views_count';
    $count = get_post_meta($post_id, $count_key, true);

    if ($count == '') {
        $count = 0;
        delete_post_meta($post_id, $count_key);
        add_post_meta($post_id, $count_key, '0');
    } else {
        $count++;
        update_post_meta($post_id, $count_key, $count);
    }
}

// 在产品单页加载时调用计数函数
add_action('wp_head', 'track_product_views');
function track_product_views() {
    if ( is_singular('product') ) {
        global $post;
        set_product_views_count($post->ID);
    }
}

// 可选:在后台产品列表显示浏览量(方便管理)
add_filter('manage_product_posts_columns', 'add_product_views_column');
function add_product_views_column($columns) {
    $columns['product_views'] = __('浏览量', 'your-text-domain');
    return $columns;
}

add_action('manage_product_posts_custom_column', 'display_product_views_column', 10, 2);
function display_product_views_column($column, $post_id) {
    if ($column === 'product_views') {
        echo get_post_meta($post_id, '_product_views_count', true) ?: 0;
    }
}

方法二:使用第三方插件

如果您不想手动编写代码,也可以选择使用现有的WordPress插件来管理文章或产品浏览量,例如“WP PostViews”或“Post Views Counter”等。这些插件通常会提供一个自定义字段来存储浏览量,其字段名可能不同,您需要查阅插件文档以获取正确的meta_key。

Reecho睿声
Reecho睿声

Reecho AI:超拟真语音合成与瞬时语音克隆平台

下载

2. 使用 WP_Query 按浏览量排序产品

一旦产品浏览量数据被正确记录到自定义字段(例如_product_views_count)中,我们就可以使用WP_Query来查询并按此字段进行排序。关键在于使用meta_key和orderby参数。

以下是一个示例代码,展示如何查询特定分类下的产品,并按照浏览量从高到低(降序)进行排序:

$theCat = 123; // 替换为您的产品分类ID

$args = array(
    'post_type'      => 'product',
    'posts_per_page' => 15,
    'tax_query'      => array(
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'id',
            'terms'    => $theCat
        )
    ),
    'meta_key'       => '_product_views_count', // 替换为您的浏览量自定义字段名
    'orderby'        => 'meta_value_num',      // 告知WP_Query按数字值排序
    'order'          => 'DESC',                // 降序排列,即浏览量从高到低
    'suppress_filters' => false,               // 确保所有过滤器都生效
);

$products_by_views = new WP_Query( $args );

if ( $products_by_views->have_posts() ) {
    while ( $products_by_views->have_posts() ) {
        $products_by_views->the_post();
        // 在这里输出产品信息,例如:
        echo '<h3>' . get_the_title() . '</h3>';
        echo '<p>浏览量: ' . (get_post_meta(get_the_ID(), '_product_views_count', true) ?: 0) . '</p>';
        // 其他产品信息...
    }
    wp_reset_postdata(); // 重置全局$post变量
} else {
    echo '没有找到产品。';
}

关键参数解释:

  • meta_key: 这个参数指定了用于排序的自定义字段的键名。在我们的例子中,是_product_views_count。如果您使用其他插件,请确保使用插件定义的键名。
  • orderby: 这个参数定义了排序的依据。
    • meta_value_num: 非常重要! 当您希望根据自定义字段的数值大小进行排序时,必须使用meta_value_num。如果使用meta_value,则会按字母顺序排序,这对于数字是不正确的。
  • order: 定义排序方向。
    • DESC: 降序,即从最大值到最小值(浏览量最高的排在前面)。
    • ASC: 升序,即从最小值到最大值。
  • suppress_filters: 设为false可以确保其他插件或主题可能添加的过滤器仍然有效。

3. 注意事项与最佳实践

  • 确保数据存在且正确: 在使用meta_key进行排序之前,请务必确认所有相关产品都已经有了_product_views_count这个自定义字段,并且其值是有效的数字。新创建的产品可能没有这个字段,或者值为空,这可能导致它们在排序时被忽略或排在最前面/最后面。
  • 缓存问题: 网站缓存(如WP Super Cache, W3 Total Cache, CDN缓存等)可能会影响浏览量计数的实时性。用户访问的页面可能是缓存版本,导致计数器没有被触发。您可能需要配置缓存插件,排除产品单页的缓存,或者使用AJAX请求来更新浏览量。
  • 性能考量: 对于访问量非常大的网站,每次页面加载都更新数据库可能会对性能造成一定影响。可以考虑以下优化策略:
    • 批量更新: 周期性地(例如每小时)将浏览量数据从一个临时存储(如Redis或文件)批量写入数据库。
    • 异步更新: 使用AJAX或wp_remote_post在后台异步更新浏览量,避免阻塞页面加载。
    • 限制查询: 避免在首页或分类页等高流量区域进行大量按浏览量排序的复杂查询,可以考虑将热门产品缓存起来。
  • 权限与机器人: 上述浏览量计数器会记录所有访问者的浏览,包括搜索引擎爬虫和恶意机器人。如果需要更精确的“真实用户”浏览量,您可能需要添加额外的逻辑来过滤掉机器人,例如检查$_SERVER['HTTP_USER_AGENT']或使用更高级的统计工具
  • 自定义字段的可见性: 在上述示例中,我们使用了以下划线开头的自定义字段名_product_views_count。这在WordPress中是一个惯例,表示该字段是“隐藏”的,不会默认显示在后台的自定义字段面板中,除非您手动启用。这有助于保持后台界面的整洁。

总结

通过上述步骤,您可以在WooCommerce中成功实现产品按浏览量排序的功能。核心在于首先建立一个可靠的产品浏览量计数机制,将浏览量存储为产品的自定义字段,然后利用WP_Query的meta_key和orderby => 'meta_value_num'参数进行高效且准确的排序。在实施过程中,务必关注数据完整性、缓存策略和性能优化,以确保为用户提供最佳的浏览体验。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

166

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

170

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

124

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

253

2024.09.24

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1003

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

669

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

412

2024.04.07

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号