Intereting Posts
Скрипт частично работает только при активации темы, но полностью работает на деактивации? Пользовательское поле WordPress должно быть уникальным. Является ли это возможным? RSS-каналы с других сайтов на моей индексной странице? Я хочу показать только данные на сегодня Пользовательская кнопка Тип сообщения в Admin дает ошибку 400 Оценка внешнего правила перезаписи перед внутренним правилом перезаписи WordPress Как заставить дочернюю тему игнорировать шаблон родительских тем get_users () timeout на большой пользовательской базе – опции для разделения запроса? Создание шаблонов страниц с записями изображений Значения второго выбранного списка не сохраняются после нажатия обновления. Может ли блог WordPress полностью размещаться на CDN при кэшировании? Как решить проблему «Не удалось отправить сообщение» для контактной формы 7? post2posts с использованием проблемы с array_items Создать сообщения с помощью импорта> RSS / WXR / XML и передать значения в пользовательские поля Word Press Постоянная ссылка Изменение

Назначение нескольких или дополнительных возможностей конкретным пользователям или создание дополнительных ролей, таких как роли 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' );