Как автоматически удалять записи произвольного типа через 3 месяца после публикации?

20 апр. 2012 г., 20:15:25
Просмотры: 2.27K
Голосов: 0

Мне нужен код, который можно разместить в файле functions.php и который будет работать только с указанным произвольным типом записи.

Я уже пробовал несколько плагинов, но все они содержат больше функций, чем мне нужно. Использовать их - это избыточно, так как они затрагивают вещи, с которыми я не хочу работать.

Идеально, если код будет:

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

К сожалению, я не могу собрать все это вместе самостоятельно.

Есть ли хороший (простой) плагин для этого? Или может у вас есть готовый код?

0
Все ответы на вопрос 2
0
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/

23 дек. 2016 г. 17:54:21
0

Есть два способа, которые приходят мне на ум...

Наиболее простым кажется использование команды wp_cron.

http://codex.wordpress.org/Function_Reference/wp_cron

В своих функциях вы можете добавить пользовательский SQL (или другой код) для обновления вашей базы данных так, как вам нужно...

Альтернативно, вы можете попробовать этот плагин http://wordpress.org/extend/plugins/wp-cron-control/ и настроить его под свои задачи.

Я не могу предоставить точный SQL-запрос, который вам нужен, но с этими двумя инструментами вы сможете запускать запланированные автоматические события на вашем сайте.

21 июн. 2012 г. 18:40:08