0

0

获取与特定分类法关联的WordPress用户列表教程

心靈之曲

心靈之曲

发布时间:2025-08-29 21:02:02

|

607人浏览过

|

来源于php中文网

原创

获取与特定分类法关联的WordPress用户列表教程

本教程详细介绍了如何在WordPress中获取与特定分类法关联的用户列表。文章提供了两种主要方法:通过遍历用户并查询其在指定分类法下的文章来间接关联,以及直接使用SQL查询wp_term_relationships表来获取直接关联的用户ID。教程包含示例代码、方法比较及注意事项,帮助开发者根据具体需求选择最合适的实现方案。

引言:理解用户与分类法的关联

wordpress中,用户与分类法(如分类、标签或自定义分类法)的关联方式并非单一。通常存在两种主要情景:

  1. 间接关联:用户创作了属于某个分类法术语的文章。 这是最常见的关联方式,即用户通过发布文章、产品或其他自定义内容类型,而这些内容又被归类到特定的分类法术语下。在这种情况下,用户本身并未直接与分类法术语关联,而是通过其发布的内容建立联系。
  2. 直接关联:用户本身被直接关联到某个分类法术语。 这种情况通常出现在自定义的WordPress实现中。例如,开发者可能通过插件或主题代码,将用户ID作为wp_term_relationships表中的object_id,直接与某个分类法术语的term_taxonomy_id进行关联。这并非WordPress核心的默认行为,但通过自定义代码是可实现的。

本教程将针对这两种不同的关联场景,提供相应的WordPress编程方法,帮助您准确获取所需的用户列表。

方法一:通过用户发布的文章间接关联分类法

这种方法适用于查找那些发布了特定分类法下内容的用户的场景。它通过WordPress的get_users()和WP_Query功能来实现。

实现原理

核心思想是首先获取所有用户(或特定用户子集),然后对每个用户执行一个WP_Query,检查该用户是否发布了归属于目标分类法术语的内容。

示例代码

以下代码演示了如何获取所有用户,然后筛选出那些发布了特定产品分类下产品的用户。

 'ID', // 按用户ID排序
    'fields'  => 'all_with_meta' // 获取所有用户数据,包括元数据
);

// 2. 获取所有WordPress用户
$users = get_users($user_args);

// 用于存储符合条件的用户ID
$associated_user_ids = array();

// 3. 遍历每个用户
foreach ($users as $user) {
    // 4. 为每个用户创建一个WP_Query来检查其发布的文章
    $user_posts = new WP_Query(array(
        'post_type'      => 'product',      // 指定自定义文章类型,例如'product'
        'author'         => $user->ID,      // 查询当前用户发布的文章
        'posts_per_page' => 1,              // 只需要检查是否存在,所以设置为1即可
        'fields'         => 'ids',          // 只获取文章ID,提高效率
        'tax_query'      => array(          // 分类法查询
            array(
                'taxonomy' => 'product_cat', // 指定自定义分类法别名,例如'product_cat'
                'field'    => 'term_id',     // 根据术语ID进行查询
                'terms'    => 22             // 指定目标分类法术语的ID
            )
        )
    ));

    // 5. 如果用户有发布符合条件的文章,则将其ID添加到列表中
    if ($user_posts->have_posts()) {
        $associated_user_ids[] = $user->ID;
        // 示例:输出用户姓名和关联信息
        // echo $user->first_name . ' ' . $user->last_name . ' 关联到分类法术语 22' . "
"; } // 重置查询,以防影响后续的查询 wp_reset_postdata(); } // 6. 输出所有关联的用户ID if (!empty($associated_user_ids)) { echo "与分类法术语 22 关联的用户ID列表:
"; echo implode(', ', $associated_user_ids); } else { echo "没有找到与分类法术语 22 关联的用户。"; } ?>

优化:针对特定用户ID的查询

如果您已经有一个用户ID的子集,并且只想检查这些用户是否符合条件,可以使用get_users()函数的include参数来优化查询,避免遍历所有用户。

360智图
360智图

AI驱动的图片版权查询平台

下载
 $specific_user_ids, // 只获取这些ID的用户
    'fields'  => 'all_with_meta'
);
$users = get_users($user_args);

$associated_user_ids = array();

// 3. 遍历这些特定用户,并检查其文章
foreach ($users as $user) {
    $user_posts = new WP_Query(array(
        'post_type'      => 'product',
        'author'         => $user->ID,
        'posts_per_page' => 1,
        'fields'         => 'ids',
        'tax_query'      => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'term_id',
                'terms'    => 22
            )
        )
    ));

    if ($user_posts->have_posts()) {
        $associated_user_ids[] = $user->ID;
    }
    wp_reset_postdata();
}

// 4. 输出结果
if (!empty($associated_user_ids)) {
    echo "在指定用户中,与分类法术语 22 关联的用户ID列表:
"; echo implode(', ', $associated_user_ids); } else { echo "在指定用户中,没有找到与分类法术语 22 关联的用户。"; } ?>

优缺点分析

  • 优点:
    • 完全使用WordPress的API,与WordPress核心逻辑一致,代码可读性好。
    • 利用WP_Query的强大功能,可以轻松添加更多筛选条件(如文章状态、日期等)。
  • 缺点:
    • 性能问题: 对于拥有大量用户和文章的网站,为每个用户执行WP_Query可能会导致性能瓶颈,因为这会产生大量的数据库查询。
    • 间接关联: 这种方法只能找到“发布了特定分类法下文章”的用户,而不是用户本身直接与分类法关联。

方法二:通过直接数据库查询获取用户与分类法的直接关联

这种方法适用于用户ID被自定义地存储在wp_term_relationships表中作为object_id,直接与分类法术语关联的情况。它直接使用WordPress的$wpdb对象执行SQL查询。

实现原理

使用$wpdb对象直接执行SQL查询,连接wp_users表和wp_term_relationships表。通过u.ID = r.object_id将用户与关系表关联,并根据r.term_taxonomy_id进行筛选,从而获取直接关联的用户ID。

示例代码

prepare(
    "SELECT u.ID
     FROM {$wpdb->users} u
     INNER JOIN {$wpdb->term_relationships} r
     ON u.ID = r.object_id
     WHERE u.user_status = 0
     AND r.term_taxonomy_id = %d",
    1186 // 替换为您要查询的 term_taxonomy_id
);

$results = $wpdb->get_results($sql_query, ARRAY_A);

// 遍历查询结果,提取用户ID
foreach ($results as $id_array) {
    $all_ids[] = $id_array['ID'];
}

// 输出所有关联的用户ID
if (!empty($all_ids)) {
    echo "直接关联到分类法术语 ID (term_taxonomy_id) 1186 的用户ID列表:
"; echo implode(', ', $all_ids); } else { echo "没有找到直接关联到分类法术语 ID (term_taxonomy_id) 1186 的用户。"; } ?>

优缺点分析

  • 优点:
    • 直接且高效: 精确匹配原始SQL查询的意图,直接从数据库获取数据,对于大规模数据查询通常更高效。
    • 适用于自定义场景: 如果您的WordPress环境中有自定义逻辑,将用户ID直接关联到wp_term_relationships表,这是最直接的实现方式。
  • 缺点:
    • 绕过API: 直接操作数据库绕过了WordPress的抽象层,可能增加代码的维护难度,且对数据库结构有依赖。
    • 兼容性风险: 如果WordPress未来改变了数据库表结构,直接SQL查询可能需要调整。
    • 需要SQL知识: 开发者需要对SQL语言和WordPress数据库结构有一定了解。
    • term_taxonomy_id: 需要使用term_taxonomy_id而非term_id。

选择合适的方案

  • 如果您的需求是查找“发布了特定分类法下文章的用户”,并且用户数量或文章数量不是极其庞大以至于造成性能问题,推荐使用方法一(通过get_users()和WP_Query)。它更符合WordPress的编程范式,易于维护和扩展。
  • 如果您的WordPress环境中存在自定义逻辑,将用户ID直接作为object_id存储在wp_term_relationships表中,并且需要精确匹配这种直接关联,那么方法二(直接数据库查询)是更直接且高效的选择。请务必确保您的自定义实现确实将用户ID存储在此处。

注意事项

  1. 性能考量: 方法一在处理大量用户时,由于循环内部的WP_Query可能导致效率不高。考虑使用缓存插件、对象缓存,或者在用户数量极大时,重新评估是否可以通过更优化的数据库查询来达到目的。
  2. term_taxonomy_id与term_id:
    • 在WP_Query的tax_query中,通常使用term_id来指定分类法术语。
    • 在wp_term_relationships数据库表中,存储的是term_taxonomy_id。term_taxonomy_id是wp_term_taxonomy表中的ID,它唯一标识一个术语在一个特定分类法中的使用。一个term_id可能对应多个term_taxonomy_id(例如,如果同一个术语被用于不同的分类法)。请确保在相应的方法中使用正确的ID类型。
  3. 自定义类型: 示例代码中的post_type(如product)和taxonomy(如product_cat)需要根据您实际的自定义文章类型和自定义分类法别名进行修改。
  4. user_status: 在SQL查询中,u.user_status = 0通常表示正常用户。在PHP get_users中,可以通过role或其他参数进行用户筛选,以达到类似目的。
  5. 安全性: 直接使用$wpdb进行SQL查询时,务必使用$wpdb->prepare()函数来防止SQL注入攻击,确保查询参数的安全。

总结

获取与分类法关联的WordPress用户是一个常见的需求,但实现方式取决于“关联”的具体定义。本教程提供了两种主要方法:通过get_users()和WP_Query间接查找发布了特定分类法下内容的用户,以及通过$wpdb直接查询数据库来获取自定义直接关联的用户。理解每种方法的原理、优缺点和适用场景,可以帮助您选择最适合当前项目需求的解决方案,并确保代码的效率和可维护性。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

727

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

328

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

350

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1263

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

360

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

841

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

423

2024.04.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

2

2026.01.29

热门下载

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

精品课程

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

共137课时 | 10.1万人学习

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

共6课时 | 11.2万人学习

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

共13课时 | 0.9万人学习

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

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