Как получить массив пользовательских ролей с определенными возможностями или без них?

Хотя это может показаться глупой задачей, я просто не могу найти способ получить массив всех ролей пользователей WordPress, которые не имеют конкретной возможности.

С помощью приведенной ниже функции я могу получить все доступные роли пользователя, но как я могу их отфильтровать, чтобы я мог возвращать только роли пользователя с определенными возможностями или без них, скажем, это upload_files ? Будет ли это выполнимо?

 function get_roles_that_cant_upload_files() { global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $available_roles = array(); $available_roles = $wp_roles->get_names(); return $available_roles; } 

Я искал всюду в документах WordPress и в Интернете для правильной основной функции WP, которая, кажется, не существует, даже фильтра.

Я надеялся получить только роли пользователя без возможности upload_files . Сделав это, я буду использовать его для подачи поля выбора в пределах параметров плагина, а затем я установил бы другую возможность для выбранных ролей пользователей.

Я не разработчик, поэтому я пробовал несколько «хаков» без успеха. Похоже, что пользовательские возможности хранятся в таблице wp_options , это заставляет меня думать, можно ли выполнить запрос базы данных, чтобы получить эти результаты?

Любые входы оцениваются.

Solutions Collecting From Web of "Как получить массив пользовательских ролей с определенными возможностями или без них?"

Попробуйте следующее:

 function get_roles_that_cant($capability) { global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $available_roles_names = $wp_roles->get_names();//we get all roles names $available_roles_capable = array(); foreach ($available_roles_names as $role_key => $role_name) { //we iterate all the names $role_object = get_role( $role_key );//we get the Role Object $array_of_capabilities = $role_object->capabilities;//we get the array of capabilities for this role if(!isset($array_of_capabilities[$capability]) || $array_of_capabilities[$capability] == 0){ //we check if the upload_files capability is present, and if its present check if its 0 (FALSE in Php) $available_roles_capable[$role_key] = $role_name; //we populate the array of capable roles } } return $available_roles_capable; } 

я взял вас на работу и добавил логику, чтобы получить объект rol и получить все возможности для этого объекта и проверить, обладает ли эта роль роликом, и я сделал ее общей, чтобы вы могли отправить, какую функцию вы хотите проверить, используйте ее так :

 get_roles_that_cant('upload_files'); 

он вернет массив следующим образом:

 Array ( [contributor] => Contributor [subscriber] => Subscriber ) 

поэтому вы можете сделать свои выпадающие значения с помощью $key массива и строки опций, используя $value массива.