Как автоматически удалять записи произвольного типа через 3 месяца после публикации?
Мне нужен код, который можно разместить в файле functions.php
и который будет работать только с указанным произвольным типом записи.
Я уже пробовал несколько плагинов, но все они содержат больше функций, чем мне нужно. Использовать их - это избыточно, так как они затрагивают вещи, с которыми я не хочу работать.
Идеально, если код будет:
- Настраивать ежедневное задание cron на 00:00 (ночью)
- Запускать пользовательскую функцию, которая запрашивает из базы данных записи произвольного типа и сравнивает их дату публикации с текущей датой.
- Если запись произвольного типа старше 3 месяцев (пользовательская функция возвращает true), то вызывать
wp_delete_post()
для ID записи.
К сожалению, я не могу собрать все это вместе самостоятельно.
Есть ли хороший (простой) плагин для этого? Или может у вас есть готовый код?

add_action( 'wp', 'delete_expired_coupons_daily' );
function delete_expired_coupons_daily() {
if ( ! wp_next_scheduled( 'delete_expired_coupons' ) ) {
wp_schedule_event( time(), 'daily', 'delete_expired_coupons');
}
}
add_action( 'delete_expired_coupons', 'delete_expired_coupons_callback' );
function delete_expired_coupons_callback() {
$args = array(
'post_type' => 'coupon',
'posts_per_page' => -1
);
$coupons = new WP_Query($args);
if ($coupons->have_posts()):
while($coupons->have_posts()): $coupons->the_post();
// получаем дату публикации поста
$test = get_the_date();
// конвертируем в strtotime
$converter = strtotime($test);
// добавляем 3 месяца
$deletedate = date(strtotime("+3 month", $converter));
// проверяем, прошло ли 3 месяца с даты публикации
if (time() > $deletedate) {
wp_delete_post(get_the_ID());
// Используйте wp_delete_post(get_the_ID(),true) чтобы удалить пост из корзины тоже.
}
endwhile;
endif;
}
Поместите этот код в functions.php. Теоретически это должно работать. Код взят из Посты с истекшим сроком (удаляются) с измененным сравнением.
Для тестирования измените интервал на 3 минуты/секунды:
$test = get_the_date('F j, Y G:i:s');
$converter = strtotime($test);
$deletedate = date(strtotime("+3 minutes", $converter));
Для тестирования используйте этот плагин. https://wordpress.org/plugins/trigger-scheduled-events/

Есть два способа, которые приходят мне на ум...
Наиболее простым кажется использование команды wp_cron.
http://codex.wordpress.org/Function_Reference/wp_cron
В своих функциях вы можете добавить пользовательский SQL (или другой код) для обновления вашей базы данных так, как вам нужно...
Альтернативно, вы можете попробовать этот плагин http://wordpress.org/extend/plugins/wp-cron-control/ и настроить его под свои задачи.
Я не могу предоставить точный SQL-запрос, который вам нужен, но с этими двумя инструментами вы сможете запускать запланированные автоматические события на вашем сайте.
