
本文介绍了如何在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'.""; }}
代码解释:
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’.””; 替换为 echo $user->ID.””;
限制特定用户ID:
如果你只想查询特定用户ID,可以使用 include 参数:
$user_args = array( 'include' => array(11, 33, 52, 57, 997) // 添加你的用户ID,用逗号分隔);$users = get_users( $user_args );//Loop through each peche authorforeach($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.""; }}
方法二:使用 $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查询,以避免潜在的安全风险。
以上就是获取与特定分类法关联的用户ID列表的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1271756.html
微信扫一扫
支付宝扫一扫