
在wordpress中,用户与分类法(如分类、标签或自定义分类法)的关联方式并非单一。通常存在两种主要情景:
本教程将针对这两种不同的关联场景,提供相应的WordPress编程方法,帮助您准确获取所需的用户列表。
这种方法适用于查找那些发布了特定分类法下内容的用户的场景。它通过WordPress的get_users()和WP_Query功能来实现。
核心思想是首先获取所有用户(或特定用户子集),然后对每个用户执行一个WP_Query,检查该用户是否发布了归属于目标分类法术语的内容。
以下代码演示了如何获取所有用户,然后筛选出那些发布了特定产品分类下产品的用户。
<?php
// 1. 定义获取用户的参数
$user_args = array(
'orderby' => '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' . "<br>";
}
// 重置查询,以防影响后续的查询
wp_reset_postdata();
}
// 6. 输出所有关联的用户ID
if (!empty($associated_user_ids)) {
echo "与分类法术语 22 关联的用户ID列表:<br>";
echo implode(', ', $associated_user_ids);
} else {
echo "没有找到与分类法术语 22 关联的用户。";
}
?>如果您已经有一个用户ID的子集,并且只想检查这些用户是否符合条件,可以使用get_users()函数的include参数来优化查询,避免遍历所有用户。
<?php
// 1. 定义要检查的用户ID列表
$specific_user_ids = array(11, 33, 52, 57, 997); // 替换为您要检查的用户ID
// 2. 获取这些特定的用户
$user_args = array(
'include' => $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列表:<br>";
echo implode(', ', $associated_user_ids);
} else {
echo "在指定用户中,没有找到与分类法术语 22 关联的用户。";
}
?>这种方法适用于用户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。
<?php
global $wpdb; // 获取WordPress数据库操作对象
// 用于存储所有关联的用户ID
$all_ids = array();
// 执行SQL查询来获取直接关联的用户ID
// 注意:这里的SQL查询假设用户ID被存储在wp_term_relationships.object_id中
$sql_query = $wpdb->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列表:<br>";
echo implode(', ', $all_ids);
} else {
echo "没有找到直接关联到分类法术语 ID (term_taxonomy_id) 1186 的用户。";
}
?>获取与分类法关联的WordPress用户是一个常见的需求,但实现方式取决于“关联”的具体定义。本教程提供了两种主要方法:通过get_users()和WP_Query间接查找发布了特定分类法下内容的用户,以及通过$wpdb直接查询数据库来获取自定义直接关联的用户。理解每种方法的原理、优缺点和适用场景,可以帮助您选择最适合当前项目需求的解决方案,并确保代码的效率和可维护性。
以上就是获取与特定分类法关联的WordPress用户列表教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号