Как добавить разрешение (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 в роль, как показано в вашем первом примере.
Jonnybojangles
Мне тоже интересно, как вы бы выполнили класс WP_Role, если у вас найдется свободная минута, чтобы рассказать нам. Спасибо.
Osu
@Jonnybojagles & @Osu, посмотрите это: Полное руководство по ролям и возможностям http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/
Philip
Я уже читал эту статью в своем исследовании, но воспользовался возможностью снова пробежаться по ней, спасибо! В конечном итоге, после анализа плагина unfiltered-mu (упомянутого выше Rev. Voodoo), я выяснил, что простое изменение ролей путем добавления возможностей недостаточно. Мне потребовалось отключить фильтры KSES в WordPress.
Jonnybojangles
Я предпочитаю добавлять запятую к последнему элементу в массивах. Хотя это может казаться незначительным, так как не требуется для работоспособности кода и не вызывает ошибок, это удобно при использовании системы контроля версий для визуализации изменений; вы не увидите старую строку элемента массива удаленной, добавленной заново и выделенной как новую только из-за добавления запятой. Хотя мелочь, это помогает сэкономить много времени при анализе изменений.
nyedidikeke
Чтобы разрешить другой роли, кроме Супер Администратора или Администратора (в зависимости от того, является ли установка WordPress сетевой/MU или нет), добавлять нефильтрованный HTML в запись или комментарий, необходимо удалить фильтр KSES в WordPress.
Проверить, есть ли у пользователя определённая возможность.
if ( current_user_can( 'unfiltered_html' ) ) { … }
Если да, то удалить KSES
kses_remove_filters();
Эта функциональность уже упакована в плагин unfiltered-mu, позволяя администраторам и редакторам добавлять нефильтрованный HTML.