让 WordPress 自动删除 Post Revisions
貌似在 wp-config.php
中加入 define(’WP_POST_REVISIONS’, false);
来禁用 WordPress 的日志修订功能,post revision 还是会产生。gohsy 同学写了个插件 Revision Manager 来清理 post revision,不过个人觉得手动清理还是不够方便,决定利用 WordPress 的计划任务功能(WP_Cron)偷偷懒。
不想为了这小小的功能而多添加一个插件,所以在主题目录下的 functions.php
文件添加了以下代码:
function delete_post_revisions() {
global $wpdb;
// Also need to delete the post meta and term relationships
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN (SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision')");
$wpdb->query("DELETE FROM {$wpdb->term_relationships} WHERE object_id IN (SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision')");
// Delete the post revisions
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}
// Register the event
add_action('delete_post_revisions_event', 'delete_post_revisions');
if (!wp_next_scheduled('delete_post_revisions_event')) {
wp_schedule_event(time(), 'daily', 'delete_post_revisions_event');
}
这样 WordPress 每天会自动删除 post revision (当然得在有人访问的前提下)。其实每天运行一次也有些过于频繁了,可以将时间间隔设置得更长一些,譬如一周或者二周甚至一个月。不过 WordPress 的 Cron API 本身只提供了 hourly, daily 两个选项,所以需要自己手工添加一些运行时间间隔选项。在刚才添加的代码之前添加以下代码,
function add_schedule_options($schedules) {
$custom_schedules = array(
'weekly' => array( 'interval' => 604800, 'display' => __('Once Weekly') ),
'fortnightly' => array( 'interval' => 1209600, 'display' => __('Once Fortnightly') ),
'monthly' => array( 'interval' => 2592000, 'display' => __('Once Monthly') ),
);
return array_merge($custom_schedules, $schedules);
}
add_filter('cron_schedules', 'add_schedule_options');
然后把 wp_schedule_event
函数的第二个参数值 daily 改成 weekly 或 fortnightly 或 monthly 即可。
Comments
应该是自动保存造成的,简单点装个叫 Disable Autosave 的插件就好了。
@Freeman 希望使用自动保存功能又不想生成多余的revision,可以按我说的这么办,呵呵
Leave a Reply