如何在WordPress数据库中删除除最后三个帖子之外的所有帖子修订?

时间:2013-09-10 作者:Matoeil

以下是常用的sql命令,用于删除帖子修订和清理wp数据库:

DELETE a,b,c
FROM `wp_posts` a
LEFT JOIN `wp_term_relationships` b ON (a.ID = b.object_id)
LEFT JOIN `wp_postmeta` c ON (a.ID = c.post_id)
WHERE a.post_type = \'revision\';
我如何修改它以保持最后3次修订?

2 个回复
SO网友:Ben Miller - Remember Monica

通过将此行添加到wp-config.php 文件:

define( \'WP_POST_REVISIONS\', 3 );
这一行应该将新帖子限制为三次修订,但它不会遍历您的数据库并将其清理干净。

您找到的用于从WordPress数据库中删除旧版本的SQL代码段存在问题,您可以在this thread on WordPress.org. 该线程概述了问题,并提供了备选方案。该线程还审查了一些将为您执行此操作的插件。

SO网友:ecairol

这里有一种删除所有修订的方法,除了last one (我知道这不是最初问的问题,但我希望这有助于其他人使用类似的解决方案)。

Step 1. 使用要保留的修订创建临时表:

DROP TABLE IF EXISTS t_keep_revisions;
CREATE TEMPORARY TABLE t_keep_revisions AS (
    SELECT 
        MAX(p.ID) as ID,
        p.post_parent
    FROM wp_posts p
    WHERE p.post_type = \'revision\'
    GROUP BY p.post_parent
    ORDER BY p.post_parent
);
Step 2. 删除所有修订帖子,ID位于上表中的帖子除外

DELETE FROM wp_posts
WHERE post_type = \'revision\'
AND ID NOT IN (
    SELECT ID
    FROM t_keep_revisions
);
Step 3. 从wp\\U Posteta中删除孤立元数据

DELETE FROM wp_postmeta
WHERE post_id NOT IN (
    SELECT ID FROM wp_posts
)

结束

相关推荐

从现有MySQL安装程序迁移到WordPress

我当前有一个具有以下架构的数据库:表:文章列:ID、标题、作者、内容表:作者列:ID、AuthorName、EmailAddress表:类别列:ID、CategoryName我有兴趣把这个转移到WordPress上。我实际上不需要保留authors或categories表,因为我们正在迁移中修改这些部分。但是,我确实需要保存articles表的某些行(或者所有行,如果更容易的话)。这包括保持作者ID与之链接。我愿意手动查询,以选择要移到新表的行,但我不确定应该在哪里执行此操作。因此,我的问题是:如何以最简