WordPress, iframe и роли пользователей…

Так как одним из видов моей деятельности есть программирование/администрирование,  опишу интересный случай, с которым пришлось столкнуться и успешно решить возникшую задачу.

Есть сайт на wordpress, которым неспешно занимаются несколько людей, под одним логином, редактируя/добавляя непересекающиеся страницы/записи.  Работали все эти люди под одним логином, с максимальными правами.

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

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

Для этого в functions.php используемой темы был добавлен код типа:

 $result = remove_role( ‘youtubpageeditor’);
$result = add_role( ‘youtubpageeditor’, ‘редактор страницы трансляции’,
array(
‘read’ => true, // true allows this capability
‘edit_pages’ => true, // Allows user to edit pages
‘edit_published_pages’ => true, // Allows user to edit pages
‘publish_pages’ => true,
);

Статьи «в интернетах» советуют сделать так чтобы этот код выполнялся единожды — например при активации плагина. Я не оформлял действие в плагин, поэтому после открытия страницы (код выполнился), закомментировал его. Роль создалась и осталась.

Всё вроде прекрасно, но!  После первой редакции новым пользователем, код вставки видео с ютуба исчез!  то есть блок <iframe>….</iframe>.

Притом при редактировании по старой технологии, суперпользователем — код оставался. Непорядок Тут уже гугление было не таким успешным. Вернее предлагались какие-то плагины и прочие костыли, но я чувствовал что это какая-то разница в правах (возможностях, Capabilities, если говорить в терминах wordpress), поскольку под одним пользователем всё работает, а под другим — нет.

Так оно и оказалось — есть «возможность» unfiltered_html, которая, согласно кодексу, включена по-умолчанию только у суперадмина, отсутствие которой не дает вставлять в редактор некоторые конструкции html, блок iframe, script в том числе.

Добавив в массив возможностей создаваемой роли строку ‘unfiltered_html’ => true,  всё заработало как хотелось, без всяких доп. плагинов и прочих костылей.

Кодекс вордпресс надо читать и чтить, как и другие 🙂

Кстати если гуглить по unfiltered_html, то данный метод решения уже описан, как «в лоб», так и путем добавления опции к существующим правам. Оставлю здесь вариант, чтобы не забыть:

$admin_role = get_role( ‘administrator’ );
// grant the unfiltered_html capability
$admin_role->add_cap( ‘unfiltered_html’, true );

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *