
在wordpress开发中,有时我们需要识别出与特定分类法(taxonomy)术语(term)相关的用户。由于wordpress默认的用户模型并未直接与分类法建立关系,这种关联通常是通过用户发布的文章(posts)或自定义文章类型(custom post types)间接实现的。然而,在某些特定的定制化场景下,用户id也可能被直接关联到分类法关系表中。本文将探讨这两种主要实现方式。
这是最常见且符合WordPress最佳实践的方法,它基于一个前提:用户与分类法的关联是通过他们所撰写或发布的文章来实现的。例如,如果一个用户发布了一篇属于“产品分类”中“电子产品”术语的文章,那么该用户就被视为与“电子产品”这个分类法术语相关联。
核心思想:
示例代码:
以下代码演示了如何遍历所有用户,并查找那些发布了属于特定自定义文章类型(product)和特定分类法(product_cat)术语(ID为 22)的文章的用户。
// 1. 定义查询用户时的参数 (可选,此处为空表示获取所有用户)
$user_args = array(
'orderby' => 'ID', // 按用户ID排序
// 'include' => array(11, 33, 52, 57, 997) // 如果已知特定用户ID,可在此处指定以优化性能
);
// 2. 获取所有用户
$users = get_users($user_args);
$associated_user_ids = array(); // 用于存储最终关联的用户ID
// 3. 遍历每个用户
foreach ($users as $user) {
// 4. 为当前用户构建 WP_Query 查询,查找其发布的文章
$user_posts_query = new WP_Query(array(
'post_type' => 'product', // 替换为您的自定义文章类型slug
'author' => $user->ID, // 查询当前用户发布的文章
'posts_per_page' => 1, // 只需要检查是否存在,所以只取一篇即可
'tax_query' => array( // 分类法查询
array(
'taxonomy' => 'product_cat', // 替换为您的自定义分类法slug
'field' => 'term_id', // 根据术语ID查询
'terms' => 22 // 替换为您的目标术语ID
)
),
'fields' => 'ids' // 仅获取文章ID,提高效率
));
// 5. 如果查询结果存在文章,则表示该用户与指定分类法术语关联
if ($user_posts_query->have_posts()) {
// echo $user->first_name . ' ' . $user->last_name . ' 关联到分类法术语ID 22<br>';
$associated_user_ids[] = $user->ID; // 存储用户ID
}
// 重置文章数据,以避免对后续查询产生影响
wp_reset_postdata();
}
// 输出所有关联的用户ID
if (!empty($associated_user_ids)) {
echo '与分类法术语ID 22关联的用户ID:' . implode(', ', $associated_user_ids) . '<br>';
} else {
echo '没有用户与分类法术语ID 22关联。<br>';
}代码解析:
注意事项:
在某些高度定制化的场景下,用户ID可能被直接存储在 wp_term_relationships 表的 object_id 字段中,从而与分类法术语建立直接关联。这并非WordPress的标准行为(通常 object_id 存储文章ID),但如果您的系统存在这样的定制,直接执行SQL查询会是最直接高效的方法。
核心思想: 通过SQL联接 wp_users 表和 wp_term_relationships 表,筛选出 user_status 为0(活动用户)且 term_taxonomy_id 匹配指定分类法术语的用户。
示例代码:
以下代码演示了如何使用WordPress的 $wpdb 全局对象执行SQL查询,以获取直接与 term_taxonomy_id 为 1186 关联的用户ID。
<?php
global $wpdb; // 获取WordPress数据库操作对象
$all_ids = array(); // 用于存储最终关联的用户ID
// 执行SQL查询
// 注意:此SQL查询假设 wp_term_relationships.object_id 可以直接是用户ID。
// 这通常不是WordPress的标准行为,但在特定定制化场景下可能适用。
$results = $wpdb->get_results(
"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 = 1186", // 替换为您的目标 term_taxonomy_id
ARRAY_A // 以关联数组形式返回结果
);
// 处理查询结果,提取用户ID
if (!empty($results)) {
foreach ($results as $row) {
$all_ids[] = $row['ID'];
}
}
// 输出所有关联的用户ID
if (!empty($all_ids)) {
echo '通过直接SQL查询关联的用户ID:' . implode(', ', $all_ids) . '<br>';
} else {
echo '没有用户通过直接SQL查询关联到 term_taxonomy_id 1186。<br>';
}代码解析:
注意事项:
获取与特定分类法关联的WordPress用户,通常涉及间接关联或特殊直接关联两种情况。理解您的系统如何建立这种关联是选择正确方法的关键。
通过本文提供的两种方法,您可以根据项目的具体需求和系统配置,有效地获取与WordPress分类法关联的用户列表。
以上就是获取与特定分类法关联的WordPress用户列表的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号