Запрещаем обновлять и удалять записи после определенного периода

Управление сайтом на WordPress, где работают несколько авторов может быть сложным в некоторых случаях. Существуют плагины, управляющие процессами редактирования материалов, но иногда могут возникнуть ситуации, где нужны нестандартные решения для лучшего контроля вашего сайта на WordPress. Недавно мы помогли одному пользователю с таким решением. Им было необходимо запретить обновление записей после определенного периода времени для всех пользователей (включая редакторов). Например, если опубликованная запись старше 30 дней, то она редакторы не смогут ее ни отредактировать или удалить. Только у администраторов останется такая функция. В этой статье мы расскажем как заблокировать редактирование, обновление и удаление записей после определенного времени в WordPress.

Locking posts updates and deletion for older published posts in WordPress

Все, что нужно сделать, это добавить следующий код в файл functions.php вашей темы или в плагин для определенного сайта для WordPress.

function devise_restrict_editing( $allcaps, $cap, $args ) {

    if( 'edit_post' != $args[0] && 'delete_post' != $args[0]
      || !empty( $allcaps['manage_options'] )
      || empty( $allcaps['edit_posts'] ) )
        return $allcaps;

    // Загружаем данные записи:
    $post = get_post( $args[2] );

    if( 'publish' != $post->post_status )
        return $allcaps;

    // если запись старше 30 дней. Можно изменить значение времени
    if( strtotime( $post->post_date ) < strtotime( '-30 day' ) ) {
        //тогда запрещаем редактирование
        $allcaps[$cap[0]] = FALSE;
    }
    return $allcaps;
}
add_filter( 'user_has_cap', 'devise_restrict_editing', 10, 3 );


Функция проверяет, есть ли у пользователя возможность редактировать или удалять запись. Затем она проверяет статус записи. Если пост опубликован и он старше 30 дней, тогда у пользователя отбирается возможность редактирования и удаления. Если запись опубликована, но 30 дней еще не прошло, тогда пользователям разрешается совершить вышеуказанные действия.
Примечение: Администраторы могут править/удалять записи в любое время.

Надеемся, что статья помогла вам с блокированием записей после определенного времени. Внедрите такое у себя на сайте? Какие полезные варианты применения вы видите у этого способа? Пишите в комментариях.

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • zeleniyalex

    Спасибо за полезный хук (у вас в комментарии неправильная циферка стоит «// если запись старше 3 дней.»)
    Подскажите пожалуйста, может есть решение как по прошествии например 50 дней отправлять запись из одной рубрики в другую, например в «архивы»?

  • Дмитрий Толстокоров

    Прошу помощи.
    Стояла задача, удалить корзину. То есть при нажатии у записи «Удалить» он не попадает в корзину, и не всплывает окно с подтверждением. В общем, полное фаталити)

    Разработчики это воплотили в жизнь.
    Но сейчас, необходимо вывести модальное окно подтверждения, чтобы если удалить — спросило, «Точно ли удалить?»

    Подскажите как это сделать?

Scroll To Top