修改具有多个分类的users.php查询

时间:2014-07-10 作者:Ben

我已经使用此代码的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);

1 个回复
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);

结束
修改具有多个分类的users.php查询 - 小码农CODE - 行之有效找到问题解决它

修改具有多个分类的users.php查询

时间:2014-07-10 作者:Ben

我已经使用此代码的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);

1 个回复
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);

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post