Допустим вы решили привлечь к созданию вашего болга много пользователей, так чтобы любой мог зарегистрироваться и писать посты а почему бы и нет концепция web 2.0 на сегодняшний день рулит .
Для этого в настройках изменяем роль нового пользователя по умолчанию стоит подписчик, а мы ставим автор. Но тут возникает куча проблем автор может беспрепятственно публиковать свои сообщения без предварительной модерации, изменять дату и время, ну и вообще ему доступны практически все чек боксы.
Кроме того в процессе исправления натолкнулся на явные баги. Итак будем оперировать файл
/wp-admin/edit-form-advanced.php
Баг 1 наверно мало кто заметил, но у всех пользователей пропала маленькая ссылочка «Удалить запись» под кнопками Сохранить Опубликовать смотрим чего там происходитнаходим строку
if ( ( ‘edit’ == $action) && current_user_can(‘delete_post’, $post_ID) )
функция current_user_can проверяет имеет ли право текущий пользователь удалить данный пост, однако константы delete_post нет даже в офицальной документации естественно этот блок не сработает поэтому меняем строку условаия на
if ( ( ‘edit’ == $action) && (current_user_can(‘edit_posts’, $post_ID) || current_user_can(‘edit_pages’, $post_ID)))
теперь очень удобная ссылочка появится для авторов при редактировании поста и для редакторов и админов при редактировании постов и страниц.
Давайте посмотрим какие вообще права доступны автору
- upload_files загружать файлы
- edit_posts редактировать свои сообщения
- publish_posts создавать новые сообщения
- read читать блог
Теперь разбираемся с кнопками Сохранить, Опубликовать, Отправить на утверждение
<?php if ( current_user_can('publish_posts') ) : ?> <input name="publish" type="submit" class="button" id="publish" tabindex="5" accesskey="p" value="<?php _e('Publish') ?>" /> <?php else : ?> <input name="publish" type="submit" class="button" id="publish" tabindex="5" accesskey="p" value="<?php _e('Submit for Review') ?>" /> <?php endif; ?>
условие if ( current_user_can(‘publish_posts’) ) проверяет имеет ли право текущий пользователь публиковать посты и рисует ему кнопку Опубликовать, в противном случае выводит кнопку Отправить на утверждение , но этого никогда не может случится потому, что правом publish_posts обладает самая низшая роль – тоесть автор, ну естественно кроме подписчика то вообще в админку попасть не может. Значит исправляем это недоразуменее.
вместо publish_posts вставляем edit_others_posts это право доступно редактору и выше.
И туже надо исправить чекбокс Статус публикации начинается он такими строками :
<select name='post_status' tabindex='4'> <?php if ( current_user_can('publish_posts') ) : // Contributors only get "Unpublished" and
тут тоже самое меняем publish_posts на edit_others_posts
это еще не все продолжение следует