我打算开办一家报纸网站(每日报纸)。我正在WP上建站点。
现在,根据我的客户的需求,新闻项目(本例中的WP帖子)需要在30天后从WP DB中完全删除。他们甚至不需要存档,因为他们不想膨胀数据库。相反,他们将在本地系统中保留文件/帖子的计划备份,但希望WP完成从WP安装/ DB中删除这些帖子。
有可能吗?如果是这样,如何在WP上执行此操作。
答案 0 :(得分:4)
你确定你需要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
<强>更新强>
使用WordPress调度功能,我们可以提供一个类似于cron的基于时间的删除后删除计划。这不是一个真正的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);"));
}
答案 1 :(得分:1)
您可以安装WP-post expirator并将其默认设置为之后删除帖子的天数。它也适用于WP-automatic https://srd.wordpress.org/plugins/post-expirator/