Фильтр пользователей по ролям
-
Всем привет! На сайте колледжа имеется система рейтинга поступающих абитуриентов (зарегистрированных пользователей сайта). Прописана она полностью через function.php. Создавал этот рейтинг, как и сам сайт не я. Моя задача «обнулить» этот рейтинг, то есть убрать/отсеять «старых» пользователей, тех, что регистрировались в прошлом году. Просмотрев код, нашел функцию, позволяющих отсеять участников по id:
$exclude = explode(',', $arr['exclude']); if($arr['exclude']) { foreach ($users_filtered as $key => $value) { foreach ($exclude as $num) { if($value['user_id'] == $num) { unset($users_filtered[$key]); } } } }Можно ли реализовать подобное по роли пользователя? Все «старые» пользователи имеют роль «Студент», тогда как новые будут «Абитуриент». Данные роли были созданы с помощью плагина Ultimate Member.
Полный код функции рейтинга:
/** * fnc for sort * */ function custom_sort($a, $b) { return strnatcmp($b["average_mark"], $a["average_mark"]); } require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /** * Shotcode table-aspirant */ function aspirant_func( $atts ) { $arr = shortcode_atts( array( 'way' => '', 'code' => '', 'form' => '', 'id' => '', 'single' => '', 'army' => '', 'exclude' => '', ), $atts ); global $wpdb; // data for col $params = ['first_name', 'last_name', 'otch', 'special', 'average_mark', 'himia', 'russian_l', 'accept_z', 'reg_number', 'obuchenie', 'orig_doc', 'picture', 'lepka', 'army', 'number_pripisnoe', 'army_city','number_voen_bil', 'birth_date']; // make string for SQL foreach ($params as $value) { $params_sting[] .= '\'' . $value . '\''; } $params_sting = implode(', ', $params_sting); $my_data = $wpdb->get_results("SELECT user_id,um_key,um_value FROM ax3l3_um_metadata WHERE um_key IN ( $params_sting )"); $psy_data = $wpdb->get_results("SELECT user_id,points FROM ax3l3_watu_takings"); $birth_day = $wpdb->get_results("SELECT user_id,meta_key,meta_value FROM ax3l3_usermeta WHERE meta_key = 'birth_date'"); // make array from SQL data foreach ($my_data as $value) { foreach ($params as $item) { if($value->um_key == $item) { if($value->um_key == 'average_mark') { $users[$value->user_id][$item] = str_replace(',', '.', $value->um_value); $users[$value->user_id]['user_id'] = $value->user_id; } else { $users[$value->user_id][$item] = $value->um_value; $users[$value->user_id]['user_id'] = $value->user_id; } // add data from table 'ax3l3_watu_takings' col 'points' foreach ($psy_data as $psy_data_item) { if($psy_data_item->user_id == $value->user_id) { $users[$value->user_id]['points'] = $psy_data_item->points; } } // add data from table 'ax3l3_usermeta' foreach ($birth_day as $day) { if($day->user_id == $value->user_id) { $users[$value->user_id]['birth_date'] = $day->meta_value; } } } } } // clear data foreach ($users as $key => $value) { if(!$value['points']) { $users[$key]['points'] = 0; } if(!$value['average_mark']) { unset($users[$key]); } } foreach ($users as $key => $value) { $users[$key]['subjects_sum'] = $value['himia']+$value['russian_l']; } // sort uasort($users, 'custom_sort'); array_multisort( array_column($users, 'average_mark'), SORT_DESC, array_column($users, 'subjects_sum'), SORT_DESC, array_column($users, 'points'), SORT_DESC, $users); $users = array_values($users); foreach ($users as $key => $value) { $special_arr = []; foreach (unserialize($value['special']) as $special) { $special_arr[] = trim(preg_replace('/[0-9.]/', '', $special)); } // create new arr with filtered results if(in_array($arr['way'], $special_arr) && $value['obuchenie'] == $arr['form'] && $value['average_mark'] ) { $users_filtered[] = $value; } } $exclude = explode(',', $arr['exclude']); if($arr['exclude']) { foreach ($users_filtered as $key => $value) { foreach ($exclude as $num) { if($value['user_id'] == $num) { unset($users_filtered[$key]); } } } } $users_filtered = array_values($users_filtered); array_unshift($users_filtered, ''); unset($users_filtered[0]); $classes = get_body_class();Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
Тема «Фильтр пользователей по ролям» закрыта для новых ответов.