2

我想清理我的 WordPress 数据库并删除一些后期修订。

但我只找到了删除所有修订的插件或代码。但这不是我想要的。我想对重大更改进行修订。这意味着只应删除在短时间内保存的修订。如果最后一次修订日期不在某个时间段内,则不应删除。

例如,我在一年前写了一篇文章并创建了 3 个修订版。半年后,我编辑了一些东西,并再次创建了 4 个修订版。我正在寻找的智能清理应该在创建帖子时清理 2 个旧版本,在编辑它时清理 3 个。只应保留最后的更改。

逻辑可能是:仅删除当前修订之前的修订,如果它不超过一周。

是否有一个插件或代码可以对修订进行如此智能的清理?

4

1 回答 1

3

我在这里看到三个选项:

1.别着急!

数据库旨在非常有效地处理大量信息。通过分析您的主题/插件或卸载不必要的插件,您一定会大大节省性能。

2. 限制允许的修订数量

有一个很棒的过滤器叫做' wp_revisions_to_keep ',你可以添加它来限制每个帖子的修订。这不是一个理想的解决方案,但它是一个快速的解决方案。

add_filter('wp_revisions_to_keep', function() { return 10; });

或者你可以在 wp-config.php 中使用它来达到同样的效果:

define( 'WP_POST_REVISIONS', 3 );

3. 随时清除修订

在创建新修订之前,会进行检查以确保新版本与旧版本不同。这使用了“wp_save_post_revision_post_has_changed”过滤器(没有可用的官方文档)。

我们可以利用这个钩子来更新现有的钩子。

add_filter( 'wp_save_post_revision_post_has_changed', 'minimize_revisions' );

function minimize_revisions( $hasChanged, $lastRevision, $newRevision ) {
    if( !$hasChanged ) return false;

    $revisionTimeThreshold = 60 * 60 * 24; // One day
    $now = get_the_time('U');

    if( $now - strtotime($lastRevision->post_date) < $revisionTimeThreshold ) {

        // Update revision, rather than create a new one
        $newRevision->ID = $lastRevision->ID;
        wp_update_post($newRevision);
        return false;
    }

    return true;
}
于 2015-03-08T06:11:05.067 回答