本文介绍了如何在wordPress中获取与特定分类法(taxonomy)关联的用户ID列表。通过使用get_users()函数和WP_Query类,我们可以遍历所有用户,并检查他们是否发布了与特定分类法相关的文章。此外,还提供了一种使用$wpdb对象直接执行sql查询的方法,以更高效地获取用户ID。
方法一:使用 get_users() 和 WP_Query
此方法通过遍历所有用户,并使用 WP_Query 检查每个用户是否发布了与特定分类法相关的文章。
$user_args = array( 'orderby' => 'ID' ); $users = get_users($user_args); // 循环遍历每个用户 foreach($users as $user){ $user_posts = new WP_Query(array( 'post_type' => 'product', // 你的自定义文章类型 'author' => $user->ID, 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'product_cat', // 你的自定义分类法slug 'field' => 'term_id', 'terms' => 22 // 你的分类法term ID ) ) )); if( $user_posts->have_posts() ) { echo $user->first_name . ' ' . $user->last_name. ' associated with taxonomy 22'."</br>"; } }
代码解释:
- get_users($user_args): 获取所有用户。$user_args 允许你自定义查询用户的方式,例如按ID排序。
- WP_Query: 用于查询文章。
- post_type: 指定要查询的文章类型。
- author: 指定要查询的作者ID。
- posts_per_page: 设置为 -1 表示获取所有文章。
- tax_query: 用于指定分类法查询条件。
- taxonomy: 分类法的 slug。
- field: 用于匹配的字段,这里使用 term_id。
- terms: 要匹配的 term ID。
- $user_posts->have_posts(): 检查查询结果是否有文章。
注意事项:
- 将 product 替换为你自己的自定义文章类型。
- 将 product_cat 替换为你自己的自定义分类法 slug。
- 将 22 替换为你自己的分类法 term ID。
- 如果只需要用户ID,可以将 echo $user->first_name . ‘ ‘ . $user->last_name. ‘ associated with taxonomy 22’.”</br>”; 替换为 echo $user->ID.”</br>”;
限制特定用户ID:
如果你只想查询特定用户ID,可以使用 include 参数:
$user_args = array( 'include' => array(11, 33, 52, 57, 997) // 添加你的用户ID,用逗号分隔 ); $users = get_users( $user_args ); //Loop through each peche author foreach($users as $user){ $user_posts = new WP_Query(array( 'post_type' => 'product', // 你的自定义文章类型 'author' => $user->ID, 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'product_cat', // 你的自定义分类法slug 'field' => 'term_id', 'terms' => 22 // 你的分类法term ID ) ) )); if( $user_posts->have_posts() ) { echo $user->ID."</br>"; } }
方法二:使用 $wpdb 直接执行 SQL 查询
此方法直接执行 SQL 查询,效率更高,尤其是在用户数量很多的情况下。
global $wpdb; $all_ids = array(); $result = $wpdb->get_results( "select u.ID FROM wp_users u INNER JOIN wp_term_relationships r ON u.ID = r.object_id WHERE u.user_status = 0 AND r.term_taxonomy_id = 1186", ARRAY_A ); foreach ( $result as $key => $id ) { $all_ids[] = $id['ID']; } if( !empty( $all_ids ) ){ echo implode( ',', $all_ids ); }
代码解释:
- global $wpdb;: 声明全局 $wpdb 对象,用于与数据库交互。
- $wpdb->get_results(): 执行 SQL 查询并返回结果。
- “SELECT u.ID FROM wp_users u INNER JOIN wp_term_relationships r ON u.ID = r.object_id WHERE u.user_status = 0 AND r.term_taxonomy_id = 1186”: SQL 查询语句,用于获取与特定 term_taxonomy_id 关联的用户ID。
- ARRAY_A: 指定结果以关联数组形式返回。
- foreach: 遍历结果集,将用户ID添加到 $all_ids 数组。
- implode( ‘,’, $all_ids ): 将 $all_ids 数组中的用户ID用逗号连接成字符串。
注意事项:
- 确保你了解 SQL 查询语句,并根据你的数据库结构进行调整。
- 将 1186 替换为你自己的 term_taxonomy_id。
- 使用 $wpdb->prepare() 来防止 SQL 注入攻击,特别是当 term_taxonomy_id 是一个变量时。
示例,使用 $wpdb->prepare():
global $wpdb; $term_taxonomy_id = 1186; // 你的 term_taxonomy_id $all_ids = array(); $query = $wpdb->prepare("SELECT u.ID FROM wp_users u INNER JOIN wp_term_relationships r ON u.ID = r.object_id WHERE u.user_status = 0 AND r.term_taxonomy_id = %d", $term_taxonomy_id); $result = $wpdb->get_results( $query, ARRAY_A ); foreach ( $result as $key => $id ) { $all_ids[] = $id['ID']; } if( !empty( $all_ids ) ){ echo implode( ',', $all_ids ); }
总结
本文介绍了两种在 WordPress 中获取与特定分类法关联的用户ID的方法。第一种方法使用 get_users() 和 WP_Query,代码更易于理解,但效率较低。第二种方法使用 $wpdb 直接执行 SQL 查询,效率更高,但需要一定的 SQL 知识。选择哪种方法取决于你的具体需求和技术水平。推荐使用 $wpdb->prepare() 来构建SQL查询,以避免潜在的安全风险。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END