Як додати здатність до ролі користувача?


14

Я керую мережею Wordpress і хочу додати можливості нефільтроване_html користувача до вже визначеної ролі користувача адміністратора. У стандартній установці Wordpress акаунт адміністратора вже матиме цю можливість, але при встановленні MU лише Super Admins надає цю можливість. Ролі та можливості Wordpress .

Як я можу збільшити роль адміністратора в межах теми чи плагіна?


1
wordpress.org/extend/plugins/unfiltered-mu, схоже, може допомогти. Але це працює для адміністраторів та редакторів. Якщо цього не бажано, можливо, код можна трохи підправити?
Преподобний Вуду


@Rev. Вуду Дякую за пропозицію. Це допомогло пролити світло на цю тему , як додавання здатності unfiltered_html мало , щоб роль, крім адміністратора або суперадміністратора можливості розміщувати вбудовування та т.д. Ключ був ип фільтрації / закріплювати KSES Wordpress ': kses_remove_filters ()
Jonnybojangles

Блог з деталями: goo.gl/xNuafH
Суреш Камруші

Відповіді:


14

Ви можете використовувати клас WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Тож для вирішення свого початкового запитання про те, як дозволити адміністраторам вводити теги SCRIPT та IFRAME в вміст публікації, ви шукаєте можливість "нефільтроване_html", яке в Multisite надається лише Super Admins.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

або ви можете запустити це один раз у своїх функціях:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));

Дякую Філіпу. Що стосується класу WP_Role, коли слід виконати код? Я здогадуюсь, це впливає на глобальний об'єкт ролей? Я радий, що ви підняли другий блок коду, в якому згадується, що я можу запустити це один раз у файлі своїх функцій. Я знайшов подібні рішення на деяких форумах підтримки Wordpress, але мені здається, що запустив один раз код у тему чи плагін. Особливо без перевірки, чи зміни вже існують. Можливо, написання ролей насправді незначне. Щоб перевірити наявність здатності порівняно, просто запишіть його на роль, як показано у першому прикладі.
Jonnybojangles

Мене також цікавить, як би ви виконали клас WP_Role, якщо у вас є хвилина вільного, щоб сказати нам. Спасибі
Osu

1
@Jonnybojagles & @Osu, перевірте це: Кінцевий посібник з ролей та можливостей garyc40.com/2010/04/ultimate-guide-to-roles-and-capa sposobnosti
Філіп

Я вже читав цю статтю під час своєї гонитви, але я скористався нагодою, щоб все проглянути все ще раз, дякую! Врешті-решт, розібравши плагін нефільтруваного му (згадуваний вище Преподобним Вуду), я врешті з’ясував, що зміни ролей шляхом додавання можливостей недостатньо. Мені потрібно було відфільтрувати фільтри KSES Wordpress '.
Jonnybojangles

Я вважаю за краще додавати кому до останнього елемента в масивах. Незважаючи на те, що це може здатися неактуальним, оскільки не потрібно змушувати код працювати, ані призводити до помилок (ів), це стане в нагоді при використанні керування версіями під час візуалізації модифікацій; ви б не побачили старий елемент масиву видалений, повторно доданий та виділений як новий із лише комою як додавання чи зміна для цього рядка. Хоч і мало, але це допомагає заощадити багато часу при аналізі модифікацій.
nyedidikeke

2

Щоб дозволити іншій ролі, окрім Super Admin або Admin (залежно від того, установка Wordpress є мережевим / MU-екземпляром чи ні), додавати до пошти або коментаря фільтра KSES Wordpress 'фільтра Wordpress' фільтра Wordpress 'потрібно видалити.

Перевірте, чи має користувач певні можливості.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Якщо так, то видаліть KSES

kses_remove_filters();

Ця функціональність вже загорнута у нефільтроване, що дозволяє адміністраторам та редакторам додавати нефільтрований html.


Функціональність також загорнута в регістр плагінів і скасує реєстрацію, так що логіку не потрібно попередньо формувати для кожного екземпляра WP.
Jonnybojangles
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.