高效删除自定义帖子类型的所有帖子

时间:2015-11-13 作者:Marcus McLean

我正在寻找一种安全快速的方法来删除所有自定义帖子类型的帖子。使用get_posts()wp_delete_post() 对于每个返回的岗位不起作用;由于涉及大量的数据库查询(超时错误),因此速度不够快。

最好是,我希望运行一个数据库查询,删除所有自定义帖子类型的帖子。有什么想法吗?

3 个回复
SO网友:pathusutariya

您可以通过删除所有帖子$wpdb

DELETE FROM wp_posts WHERE post_type=\'post_type\';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT id FROM wp_posts)
或者使用此查询将其替换为{您的CPT}}和您的自定义帖子类型

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 = \'{{your CPT}}\';

SO网友:Saruque Ahamed Mollick

您可以使用各种方法删除自定义帖子类型的所有帖子,但这里我将向您展示如何在不使用SQL查询的情况下执行此操作。例如,我们的帖子类型是product

$allposts= get_posts( array(\'post_type\'=>\'product\',\'numberposts\'=>-1) );
foreach ($allposts as $eachpost) {
wp_delete_post( $eachpost->ID, true );
}

See full tutorial Reference Here

SO网友:jwinn

现在可以用WordPress CLI 使用wp post delete. 安装CLI后,以下终端命令(位于站点的根目录中)将删除所有类型的帖子mycustomtype:

wp post delete $(wp post list --post_type=\'mycustomtype\' --format=ids)

没有原始SQL(*/em>抖动),不担心超时,而且速度很快。例如,我刚刚在不到两分钟的时间内删除了约2500篇帖子。

相关推荐

Replace domain in database

我的网站受到攻击,所以基本上所有的核心php文件都已损坏。只剩下数据库。现在我在本地主机中进行了尝试。如果我想从这个数据库恢复我的站点,域名是我唯一需要替换字符串的东西吗</我找到了这个教程-Replace string in database - 更改所有表中的域字符串,但几乎不知道将其放入何处以及如何在wordpress中触发它