Как добавить разрешение (Capability) для роли пользователя?
Я управляю сетью WordPress и хотел бы добавить разрешение unfiltered_html для уже предопределенной роли администратора. В стандартной установке WordPress учетная запись администратора уже имеет это разрешение, но в установке MU это разрешение доступно только суперадминистраторам. Роли и разрешения WordPress.
Как я могу расширить роль администратора из темы или плагина?

Вы можете использовать класс WP_Role,
// получаем объект роли
$role_object = get_role( $role_name );
// добавляем $cap возможность к этому объекту роли
$role_object->add_cap( $capability_name );
// удаляем $cap возможность из этого объекта роли
$role_object->remove_cap( $capability_name );
Таким образом, чтобы решить ваш первоначальный вопрос о том, как разрешить Администраторам вставлять теги SCRIPT и IFRAME в содержимое записей, вам нужна возможность 'unfiltered_html', которая в Multisite предоставляется только Супер Администраторам.
// получаем объект роли администратора
$admin_role = get_role( 'administrator' );
// предоставляем возможность unfiltered_html
$admin_role->add_cap( 'unfiltered_html', true );
или вы можете один раз выполнить это в ваших функциях:
/* Роли и возможности */
add_role('professional', 'Профессиональный пользователь', array(
'read' => true, // True разрешает возможность, False явно отключает её.
'edit_posts' => true,
'delete_posts' => true,
//'edit_published_posts' => true,
//'publish_posts' => true,
//'edit_files' => true,
'upload_files' => true //последний элемент массива не требует запятой!
));

Спасибо, Филипп. Что касается класса WP_Role, когда следует выполнять этот код? Я предполагаю, что это влияет на глобальный объект роли?
Я рад, что вы упомянули второй блок кода, где говорится, что я могу запустить его один раз в моем файле функций. Я находил похожие решения на форумах поддержки WordPress, но мне кажется странным иметь код, который выполняется один раз, в теме или плагине. Особенно без проверки, существует ли уже это изменение. Возможно, запись роли на самом деле незначительна. Проверить наличие capability vs просто записать capability в роль, как показано в вашем первом примере.

Мне тоже интересно, как вы бы выполнили класс WP_Role, если у вас найдется свободная минута, чтобы рассказать нам. Спасибо.

@Jonnybojagles & @Osu, посмотрите это: Полное руководство по ролям и возможностям http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Я уже читал эту статью в своем исследовании, но воспользовался возможностью снова пробежаться по ней, спасибо! В конечном итоге, после анализа плагина unfiltered-mu (упомянутого выше Rev. Voodoo), я выяснил, что простое изменение ролей путем добавления возможностей недостаточно. Мне потребовалось отключить фильтры KSES в WordPress.

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

Чтобы разрешить другой роли, кроме Супер Администратора или Администратора (в зависимости от того, является ли установка WordPress сетевой/MU или нет), добавлять нефильтрованный HTML в запись или комментарий, необходимо удалить фильтр KSES в WordPress.
Проверить, есть ли у пользователя определённая возможность.
if ( current_user_can( 'unfiltered_html' ) ) { … }
Если да, то удалить KSES
kses_remove_filters();
Эта функциональность уже упакована в плагин unfiltered-mu, позволяя администраторам и редакторам добавлять нефильтрованный HTML.
