Повесьте хук на событие «save_post», проверяйте роль редактирующего запись (здесь есть хорошая таблица соответствий прав пользователей их ролям http://codex.wordpress.org/Roles_and_Capabilities). Если пользователь ниже ранга редактора и запись имеет статус «опубликовано», меняйте статус записи на «pending» («на утверждении»).
function my_func_on_save_post($post_id) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } if (!current_user_can('edit_pages', $post_id) && get_post_status($post_id) == 'publish') { wp_update_post(array( 'ID' => $post_id, 'post_status' => 'draft' )); } } add_action('save_post', 'my_func_on_save_post');
Обсуждение на ru.stackoverflow.com
Плагин продвинутого редактирования прав User Role Editor
Стандартные статусы в WordPress
По умолчанию в WordPress имеется 8 статусов постов. Рассмотрим каждый из них:
publish
— опубликованный пост. Доступен на сайте для просмотра каждому. Этот статус присваивается записям при нажатии на кнопку «Опубликовать».
future
— пост, запланированный на публикацию в будущем. Для того, чтобы присвоить записи этот статус, устанавливаем время публикации, которое ещё не наступило и нажимаем кнопку «Запланировать».
draft
— черновики (записи, которые ещё находятся в процессе написания и не готовы к публикации). Для создания черновика нажмите кнопку «Сохранить».
pending
— пост, ожидающий проверки редактором или администратором. Все записи пользователей с ролью «Участник» отправляются на модерацию.
private
— посты, доступные для просмотра и редактирования только администраторам.
trash
— посты, находящиеся в корзине. Для того, чтобы переместить пост в корзину, нажмите на ссылку «Удалить».
auto-draft
— черновики, которые создаются автоматически в процессе редактирования постов.inherit
— этот статус присваивается всем вложениям, а также редакциям записей.