我已经使用此代码的registered\\u taxonomy和update\\u count函数成功创建了3个附加到user对象的分类法-https://gist.github.com/portfola/10750784#file-user-taxonomies-php (其余的我不需要,因为它们只与显示管理UI或分类归档的分类相关,而我不需要)。这些分类法存储每个用户分配给哪个公司、办公室和团队。
我知道自定义分类法正在存储数据,因为我通过wp_get_object_terms($user->ID,\'company\')
作用
我需要的是能够过滤用户。php由这些自定义分类法中的一个或多个生成。我创建了WP\\u List\\u表中的其他表单输入,还为每个分类添加了列。剩下的唯一一件事就是修改pre\\u user\\u查询。我认为这不是正确的方法,因为它对返回的结果没有任何影响,而且我只是MySQL的初学者。
以下是我当前修改查询的代码:
function preUserQuery($query) {
global $pagenow, $wpdb;
if(is_admin() && $pagenow == \'users.php\') {
$query->query_vars[\'tax_query\'] = array();
foreach(array(\'userCompany\',\'userOffice\',\'userTeam\') as $queryVar) {
if(isset($_GET[$queryVar]) && is_numeric($_GET[$queryVar])) {
$query->query_vars[\'tax_query\'][] = array(
\'taxonomy\' => get_post_type($_GET[$queryVar]),
\'field\' => \'name\',
\'terms\' => $_GET[$queryVar]
);
}
}
}
return $query;
}
add_filter(\'pre_user_query\',\'preUserQuery\',9999);
SO网友:Ben
因为我还将每个公司、办公室和团队post对象的用户ID存储为用户分类法,所以我可以反转查询,只包括分配给特定post对象的用户ID。
类似于这里所做的事情-http://mywebsiteadvisor.com/learning/tutorials/building-simple-groups-plugin-for-wordpress-tutorial/step-5/
只是在修改查询之前,我对其进行了修改,以便在检查中更加警惕。
function preUserQuery($query) {
global $pagenow, $wpdb;
if(is_admin() && $pagenow == \'users.php\') {
$ids = array();
foreach(array(\'userCompany\',\'userOffice\',\'userTeam\') as $queryVar) {
if(isset($_GET[$queryVar]) && is_numeric($_GET[$queryVar]) && (int) $_GET[$queryVar] > 0) {
$groupType = get_post_type($_GET[$queryVar]);
$term = get_term_by(\'name\',$_GET[$queryVar],$groupType);
if(is_object($term)) {
$ids = array_merge(get_objects_in_term($term->term_id,$groupType),$ids);
}
}
}
if(!empty($ids)) {
$ids = implode(\',\',wp_parse_id_list($ids));
$query->query_where .= " AND $wpdb->users.ID IN ($ids)";
}
}
return $query;
}
add_filter(\'pre_user_query\',\'preUserQuery\',9999);