Intereting Posts
Во всяком случае, чтобы карты Google отображали несколько уникальных мест на отдельные сообщения / страницы? wp_query args с отношением Получать все оставшиеся сообщения после определенного идентификатора сообщения Разделить на два отдельных неупорядоченных списка с пользовательским ходоком Контактная форма не отправляет электронную почту php mail () работает, но wp_mail () не Проверка того, установлен ли атрибут woocommerce Категоризация только импортированных сообщений Использование WP_Query для получения вложения возвращает пустой набор 500 внутренних ошибок сервера только для wp-admin Использование Disqus, как остановить сохранение комментариев в базе данных wp? Пользовательский Slug на основе пользовательских полей и пользовательской таксономии Перенаправление после пустой регистрационной формы Преобразование простого запроса SQL-запроса в WordPress Как удалить текст «Войти» на странице входа

Назначение нескольких или дополнительных возможностей конкретным пользователям или создание дополнительных ролей, таких как роли bbpress?

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

То, что мне нужно достичь, – это присвоить несколько возможностей определенным пользователям (которые могут принадлежать к разным ролям: авторам, подписчикам, вкладчикам …). Я планирую использовать эти возможности, чтобы назначать некоторые значки в моем сообществе, основанном на BuddyPress, или запускать некоторые действия / события в других контекстах (например, скидки в магазине WooCommerce). На данный момент я не планирую использовать их для ограничения доступа к контенту.

Я понимаю, что WordPress не позволяет пользователям иметь несколько ролей (и это немного расстраивает). Но я не знаю, как обратиться к моему делу. Возможно, мне захочется иметь подписчика с новой возможностью «x», а также вкладчика с новой возможностью «x», а также некоторых абонентов с возможностью «y», но не «x». Мне нецелесообразно создавать несколько новых пользовательских ролей только для соответствия всем комбинациям.

Альтернативный подход будет аналогичен bbPress. Я заметил, что bbPress имеет свои собственные роли пользователя, которые могут быть назначены пользователям, у которых могут быть роли WordPress. Как соприкасаться со своими собственными ролями? (и возможность редактировать такие роли для пользователей из панелей администратора пользователя?)

Или же в качестве альтернативы я должен забыть о ролях / возможностях пользователей и вместо этого использовать user_meta?

Спасибо

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

В WordPress довольно просто создавать пользовательские роли, а также назначать определенные возможности для определенных пользовательских ролей (независимо от того, из основного или пользовательского).

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

Я приведу вам пример, который, я думаю, поможет вам справиться с этими проблемами.

Предполагая, что вы создаете плагин, которому нужны 3 возможности:

  • 'Do_foo'
  • 'Do_bar'
  • 'Do_baz'

Вы можете создать настраиваемую роль, которая имеет все три возможности, а затем

  • назначить все 3 категории администраторам
  • назначить 'do_bar' и 'do_baz' редакторам, авторам и учредителям
  • присваивать подписчикам только «do_baz»

Следуя простой функции, все предыдущие вещи:

function my_plugin_custom_caps() { $caps = array('do_foo' => true, 'do_bar' => true, 'do_baz' => true); // First of all create the new user role, add all custom caps + 'read' add_role( 'myrole', 'My Role', array_merge( $caps, array( 'read' => true ) ) ); // Set specific caps to specific roles. // 1. prepare the roles array $all_roles = array('administrator', 'editor', 'author', 'constributor', 'subscriber'); // 2. get WP_Roles object to do the work $roles_obj = new WP_Roles(); // 3. Loop roles and assign caps foreach ( $all_roles as $role ) { // 4. cycle the caps and assign them one by one using some logic to assign right caps foreach ( $assign as $cap ) { if( $role === 'subscriber' && $cap !== 'do_baz' ) continue; if( $role !== 'administrator' && $cap === 'do_foo' ) continue; $roles_obj->add_cap( $role, $cap ); } } } 

После того, как WordPress сохраняет возможности в базе данных, хорошая идея выполнить эту задачу при активации плагина, поэтому она запускается только один раз:

 register_activation_hook( __FILE__, 'my_plugin_custom_caps' ); 

Также хорошая привычка удаляет добавленные возможности и настраиваемые роли, когда плагин деактивирован, поэтому вы можете создать функцию my_plugin_custom_caps_undo и использовать ее с register_deactivation_hook .

Эта функция будет почти идентична my_plugin_custom_caps() , но вместо add_role remove_cap вместо remove_cap вместо add_cap :

 function my_custom_caps_undo() { remove_role( 'myrole' ); $caps = array('do_foo' => true, 'do_bar' => true, 'do_baz' => true ); $all_roles = array('administrator', 'editor', 'author', 'constributor', 'subscriber'); $roles_obj = new WP_Roles(); foreach ( $all_roles as $role ) { foreach ( $caps as $cap ) { if( $role === 'subscriber' && $cap !== 'do_baz' ) continue; if( $role !== 'administrator' && $cap === 'do_foo' ) continue; $roles_obj->remove_cap( $role, $cap ); } } } register_deactivation_hook( __FILE__, 'my_custom_caps_undo' );