WordPress 2.5 куча багов

Допустим вы решили привлечь к созданию вашего болга много пользователей, так чтобы любой мог зарегистрироваться и писать посты а почему бы и нет концепция 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

это еще не все продолжение следует

В рубриках: PHP, WordPress — admin

Июнь 20, 2008

Комментариев (2) »

  1. Не хочу вас расстраивать, но для этого есть плагин role manager :)

    — июля 16, 2008 | 11:55 дп

  2. role manager не делает то, что написано здесь,
    он либо пускает вас к редактированию и написанию, либо не пускает, а вот ограничить функционал при написании поста он не может т.е. изъять дату, кнопку публиковать и другое.

    Именно поэтому я начал ковырять исходник

    admin — июля 17, 2008 | 8:23 дп

RSS-лента для комментариев к этой публикации. Трекбек URI

Оставьте свой комментарий