获取与特定分类法关联的用户ID列表

获取与特定分类法关联的用户ID列表

本文介绍了如何在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
喜欢就支持一下吧
点赞8 分享