2014-02-10 3 views
1

Я планирую начать публикацию на газете (ежедневная газета издания). Я создаю сайт на WP.Автоматическое удаление опубликованных сообщений после определенного количества дней в wordpress

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

Возможно ли это? Если да, то как это выполнить на WP.

ответ

2

Вы уверены, что вам нужен WordPress? Кажется слишком сложным заставить WordPress продолжать такой процесс.

Я бы предложил просто поместить следующий оператор SQL в задание cron (например, один файл .php), а остальное будет обрабатываться самостоятельно.

DELETE FROM wp_posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 30 DAY); 

Here's a good rundown on using cron to automatically do these kinds of this for you

Update

Использование функции планирования WordPress мы можем обеспечить планирование на основе времени хрон типа нашего удаления пост. Это не настоящая работа cron, поскольку она удаляет наши сообщения только после того, как человек посетил сайт через 30 дней, а не через 30 дней независимо от посетителей. Тем не менее, это самое близкое, что мы получим через WordPress, и в этом случае результаты будут одинаковыми. Добавьте в файл functions.php или ваш файл плагина.

/** 
* Add monthly interval to the schedules (since WP doesnt provide it from the start) 
*/ 
add_filter('cron_schedules','cron_add_monthly'); 
function cron_add_monthly($schedules) { 
$schedules['monthly'] = array(
    'interval' => 2419200, 
    'display' => __('Once per month') 
); 
return $schedules; 
} 
/** 
* Add the scheduling if it doesnt already exist 
*/ 
add_action('wp','setup_schedule'); 
function setup_schedule() { 
    if (!wp_next_scheduled('monthly_pruning')) { 
    wp_schedule_event(time(), 'monthly', 'monthly_pruning'); 
    } 
} 
/** 
* Add the function that takes care of removing all rows with post_type=post that are older than 30 days 
*/ 
add_action('monthly_pruning', 'remove_old_posts'); 
function remove_old_posts() { 
    global $wpdb; 
    $wpdb->query($wpdb->prepare("DELETE FROM wp_posts WHERE post_type='post' AND post_date < DATE_SUB(NOW(), INTERVAL 30 DAY);")); 
} 
+0

Спасибо за ваш ответ. Да, они хотят этого на WP, и, следовательно, они не будут хранить много копий сообщений через определенный промежуток времени. Возвращаясь к моему вопросу - если я разместил это заявление в wp-сообщениях, он не удалит даже страницы? Я хочу, чтобы только сообщения (сообщения в блогах WP были точными), потому что они хотят, чтобы эти сообщения использовались в качестве своих новостей. Прошу вас, если я ошибаюсь здесь. – kalyan

+0

Совершенно верно. Я обновил запрос с типом сообщения, а также завернул его в функцию расписания, чтобы перейти через WordPress. Обновлен ответ выше. – Valerius

+0

Еще раз спасибо за этот код. Однако необходимо ли включать функцию расписания? Я имею в виду, что в одиночку следующий код в 'function.php' не будет делать? 'add_action ('Monthly_pruning', 'remove_old_posts'); function remove_old_posts() { глобальный $ wpdb; $ wpdb-> query ($ wpdb-> prepare ("DELETE FROM wp_posts WHERE post_type = 'post' AND post_date kalyan

1

Вы можете установить экспилятор WP-post и установить его по умолчанию на количество дней, в течение которого сообщение будет удалено после. это тоже работа с WP-automatic https://srd.wordpress.org/plugins/post-expirator/

Смежные вопросы