使用phpMyAdmin批量删除WordPress帖子

时间:2014-03-08 作者:hnnnng

我有8000多篇由wp-o-matic生成的帖子,我想把它们全部去掉。

我想在phpMyAdmin中执行此查询。我只是想确保这是安全的运行,它不会抹掉我的页面。以下是查询:

DELETE FROM \'wp_posts\' WHERE \'post_type\' = \'post\'
谢谢

3 个回复
最合适的回答,由SO网友:Paul 整理而成

连接并没有那么复杂,但我不想麻烦它。由于要删除的内容很多,因此直接SQL查询的运行速度将比WP快得多。

但是,我们确实需要跟踪post ID号,并删除子体和元数据。

未测试/备份/您的风险等。

create temporary table `cull` (`post` int);

insert into cull select ID from wp_posts where my_criteria = \'my value\';

delete from wp_posts where ID in ( select post from cull );
delete from wp_posts where post_parent in ( select post from cull );
-- done with temp table, cleanup metadata
delete from wp_postmeta where post_id not in ( select ID from wp_posts );
delete from wp_comments where comment_post_id not in ( select ID from wp_posts );
delete from wp_commentmeta where comment_id not in ( select comment_ID from wp_comments );
delete from wp_term_relationships where object_id not in ( select ID from wp_posts );

SO网友:s_ha_dum

不要试图这样做SQL. 有多个表的post信息。最终,孤立数据将分散在整个数据库中。虽然可以编写JOIN您需要删除所有内容SQL 可能很复杂。

创建一个简单的循环use the Core to delete your posts.

$args = array( 
  \'post_type\' => \'post\',
  \'ignore_sticky_posts\' => true,
);

$del = new WP_Query( $args );

while ($del->have_posts()) {
  $del->the_post();
  wp_delete_post( $post->ID, false ); 
}
将第二个参数设置为wp_delete_post()true 绕过“垃圾”,直接进入“永久、无可挽回的消失”。

SO网友:Yatko

如果您知道要删除的ID的顺序(例如从12001到23006)和YOU ARE SURE(!) 没有要保留的帖子,在要删除的第一个/最后一个ID之间有和ID。

示例:一个插件(例如站点地图插件)生成了大量帖子,如果您知道应该删除ID 12001和23006之间的所有帖子,您可以运行:

DELETE FROM wp_postmeta WHERE post_id in (SELECT ID FROM wp_posts WHERE ID BETWEEN 12001 AND 23006);
DELETE FROM wp_posts where ID BETWEEN 12001 AND 23006;

结束

相关推荐

WP_Query->Get_Posts中的Split_the_Query的用途/逻辑是什么

在WP\\u Query的get\\u posts方法中,有一个部分与split\\u查询相关split\\u查询的逻辑是$split_the_query = ( $old_request == $this->request && \"$wpdb->posts.*\" == $fields && !empty( $limits ) && $q[\'posts_per_page\'] < 500 ); 可以总结为。如果:计算出的查询