• Всем привет! На сайте колледжа имеется система рейтинга поступающих абитуриентов (зарегистрированных пользователей сайта). Прописана она полностью через 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();

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Тема «Фильтр пользователей по ролям» закрыта для новых ответов.