讲师中心 微信公众号
AI工具推荐 视频效率加速

如何按总积分值对 WordPress 用户邮政编码排行榜进行降序排序

星雪大大_1113

星雪大大_1113

发布时间:2026-09-01 20:20:07

|

604人浏览过

|

来源于php中文网

原创

如何按总积分值对 WordPress 用户邮政编码排行榜进行降序排序

本文介绍如何修改 WordPress 自定义短代码函数,将按邮政编码分组统计的用户积分总和,以降序方式(从高到低)输出,核心是使用 arsort() 对关联数组按值排序并保持键值映射。

本文介绍如何修改 wordpress 自定义短代码函数,将按邮政编码分组统计的用户积分总和,以降序方式(从高到低)输出,核心是使用 `arsort()` 对关联数组按值排序并保持键值映射。

在 WordPress 中实现“按 ZIP 码分组并按积分总和排序”的排行榜功能时,原始代码的问题在于:它在遍历每个唯一 ZIP 码的同时直接 echo 输出,无法对结果整体排序。正确做法是先聚合数据、再统一排序、最后输出。

关键改进点如下:

  1. 构建关联数组存储 ZIP → 总积分映射
    使用 $sorted_zc[$result] = $sum; 将 ZIP 码作为键、对应积分总和作为值存入数组,确保 ZIP 与数值的逻辑关系不丢失。

  2. 使用 arsort() 按值降序排序
    arsort($sorted_zc) 会按数组值(即积分总和)从大到小排序,同时保留键(ZIP 码)与值的对应关系——这是实现“按积分排序但显示 ZIP”的前提。

    Cn Password Generator
    Cn Password Generator

    安全的随机密码生成器。支持自定义长度、字符类型(大写/小写字母、数字、特殊符号),排除相似字符,批量生成。纯 Python 标准库,无需 API 密钥。

    下载
  3. 分离排序与渲染逻辑
    排序后通过 foreach(arsort(...) as $zc => $point) 遍历,确保输出顺序严格遵循积分高低。

以下是优化后的完整函数(含健壮性增强):

function total_actions_map_leaderboard() {
    // 获取所有含 ZIP 码的用户(避免空值干扰)
    $user_args = array(
        'number' => -1,
        'meta_key' => 'User Zip Code',
        'meta_value' => '', // 可选:排除空 ZIP
        'meta_compare' => '!=',
    );
    $user_query = new WP_User_Query($user_args);

    if (!$user_query->get_results()) {
        echo '<div>暂无有效用户数据</div>';
        return;
    }

    // 提取所有 ZIP 码并去重
    $zipCodes = array();
    foreach ($user_query->get_results() as $user) {
        $zip = get_user_meta($user->ID, 'User Zip Code', true);
        if (!empty($zip)) {
            $zipCodes[] = $zip;
        }
    }
    $unique_zips = array_unique($zipCodes);

    // 聚合:ZIP => 总积分
    $zip_to_points = array();
    foreach ($unique_zips as $zip) {
        $zc_args = array(
            'meta_query' => array(
                array(
                    'key'     => 'User Zip Code',
                    'value'   => $zip,
                    'compare' => '='
                )
            ),
            'fields' => 'ids' // 仅获取 ID,提升性能
        );
        $zc_query = new WP_User_Query($zc_args);

        $sum = 0;
        foreach ($zc_query->get_results() as $user_id) {
            $balance = (int) get_user_meta($user_id, 'mycred_default_total', true);
            $sum += $balance;
        }
        $zip_to_points[$zip] = $sum;
    }

    // 按积分总和降序排序(保持 ZIP 键名)
    arsort($zip_to_points);

    // 渲染结果(带序号与格式化)
    $rank = 1;
    foreach ($zip_to_points as $zip => $points) {
        echo sprintf(
            '<div class="leaderboard-item"><span class="rank">%d.</span> <strong>%s</strong> — %s 分</div>',
            $rank++,
            esc_html($zip),
            number_format_i18n($points)
        );
    }
}
add_shortcode('map-leaderboard', 'total_actions_map_leaderboard');

✅ 注意事项与最佳实践:

  • 性能提示:原方案对每个 ZIP 码发起一次 WP_User_Query,在 ZIP 数量多时可能造成 N+1 查询问题。生产环境建议改用 WP_Query + GROUP BY 或自定义 SQL(配合 $wpdb)一次性聚合;此处为兼容性与可读性保留原结构。
  • 数据安全:使用 esc_html() 输出 ZIP 码,number_format_i18n() 格式化数字,防止 XSS 并适配本地化。
  • 空值处理:显式过滤空 ZIP 和无效积分(如 null/''),避免 intval() 强转导致意外 0 值。
  • 可扩展性:若需支持升序、分页或限制 Top-N,只需调整 arsort() 为 asort() 或在 foreach 前添加 array_slice()。

通过该方案,你将获得一个真正按“积分总和”排序的 ZIP 码排行榜,语义清晰、易于维护,且符合 WordPress 最佳实践。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
word背景色怎么改成白色
word背景色怎么改成白色

Word是微软公司的一个文字处理器软件。word为用户提供了专业而优雅的文档工具,帮助用户节省时间并得到优雅美观的结果。word提供了许多易于使用的文档创建工具,同时也提供了丰富的功能供创建复杂的文档使用。怎么word背景色怎么该呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4351

2023.07.21

word最后一页空白页怎么删除
word最后一页空白页怎么删除

word最后一页空白页删除方法有:通过删除回车符、调整页边距、删除分节符或调整分页符位置,您可以轻松去除最后一页的空白页。根据您实际的文档情况,选择适合您的方法进行操作,使您的文档更加美观和整洁。本专题为大家提供word最后一页空白页怎么删除不了相关的各种文章、以及下载和课程。

900

2023.07.24

word最后一页空白页怎么删除不了
word最后一页空白页怎么删除不了

word删除最后一页空白页,可以尝试使用Backspace键删除空白页,如果无效,查找和删除分页符,或者调整页面边距和行距。还可以尝试将文档保存为其他格式并重新打开和保存。本专题为大家提供word最后一页空白页为啥删除不了的相关的文章、下载、课程内容,供大家免费下载体验。

2482

2023.07.25

word单页改变纸张方向
word单页改变纸张方向

word单页改变纸张方向:1、在界面上选择文档纸张方向;2、自定义页面设置;3、分节功能。本专题为大家提供word单页改变纸张方向的相关的文章、下载、课程内容,供大家免费下载体验。

1160

2023.07.27

word转ppt
word转ppt

Word是一款常用的文字处理软件,而PowerPoint则是一款专门用于制作演示文稿的软件。在某些情况下,我们可能需要将Word文档转换为PowerPoint演示文稿,以便更好地展示我们的内容。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1057

2023.08.03

word页码从第三页开始为1教程
word页码从第三页开始为1教程

如何将word页码从第三页开始为1,本专题为大家提供相关的文章,希望可以帮助大家解决问题。

6852

2023.08.04

多个word合并成一个word教程
多个word合并成一个word教程

在工作中将多个word合并成一个word是一个很常见的操作,本专题为大家提供相关问题的解决文章,大家可以免费阅读。

2426

2023.08.04

word插入表格
word插入表格

Word是一个功能强大的文字处理软件,它不仅可以方便地创建和编辑文本内容,还可以插入表格来整理和呈现数据。那么word怎么插入表格呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2403

2023.08.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何在 Windows 11 上安装 XAMPP
如何在 Windows 11 上安装 XAMPP

共1课时 | 203人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 11.6万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn