如何清空WordPress自定义帖子数据库表

时间:2012-09-25 作者:tinyhook

我有大约2000个自定义帖子。和7个常规wp页面。我想删除所有这些自定义帖子而不影响页面。我想最简单的方法是清空自定义的post表,但我不知道怎么做。我熟悉DB操作,但我不知道wp帖子的模式,所以不知道这些自定义帖子的位置。我不介意使用插件来做这件事。

Inshort:-只想删除所有自定义帖子及其数据。

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

我使用自定义页面模板从wordpress数据库中删除了所有帖子。每次我进入这个页面,它都会删除300篇帖子。页面模板的代码为:

<?php
// Get 300 custom post types pages, set the number higher if is not slow.

$mycustomposts = get_posts( array( \'post_type\' => \'movies\', \'numberposts\' => 300));
    echo \'<pre>\';
    print_r($mycustomposts);
    echo \'</pre>\';
   foreach( $mycustomposts as $mypost ) {
     // Delete\'s each post.
    wp_delete_post( $mypost->ID, true);
    // Set to False if you want to send them to Trash.
   }
   echo \'<h1 style=:"color:red;"> DELETED! DELETED! DELETED! DELETED! </h1>\';



// 300 custom post types are being deleted everytime you refresh the page.?>

SO网友:jlengstorf

我知道这是一个老生常谈的问题,但考虑到它是在谷歌搜索这个问题时首先出现的,我想它应该附带一个解决方案。

要删除给定类型的所有帖子,请使用phpMyAdmin访问站点数据库,the command line, 或者随便你喜欢什么。然后执行以下命令:

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);
第一行删除所有带有post_type 从…起wp_posts.

然后,第二个将从wp_postmeta 不再与柱子相连。

第三行从中删除和标记或类别wp_term_relationships 与该职位类型相关。This line should be omitted if you intend to create more posts of the given post_type in the future.

SO网友:EAMann

帖子、页面和自定义帖子类型都存储在同一个表中(通常wp_posts 除非设置自定义前缀)。

在不删除页面的情况下,不能只清除表。最直接的方法是通过WordPress管理员手动删除它们(而不损害数据库)。

是的,需要一段时间。但请记住,帖子(以及页面和自定义帖子)也将数据存储在wp_postmeta 桌子如果您通过管理UI删除它们,WordPress也会清除元表。如果您只是通过UI而不是通过DB手动执行操作,那么您将省去很多麻烦。

SO网友:IanEdington

这将删除帖子、帖子元数据以及帖子上使用的任何术语。它不会删除条款本身。PHP脚本与此类似,但速度较慢。

将{your CPT}}替换为自定义帖子类型的标识符,并将其弹出到phpmyadmin或mysql上的数据库中。

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}}\';
不幸的是,它不会删除相关的媒体条目。使用sql甚至php这样做是危险的,因为您可能会删除链接到多个帖子的媒体条目。

祝你一切顺利。

结束

相关推荐

多个单个站点,一个插件目录-调整plugins_url()

[这不是一个多站点问题]更新:这个问题在逻辑上是不可能的,或者是思维循环,如果你愿意的话,请检查下面的更新。技术是laid out here in WPEngineer.它允许有一个插件文件夹来为运行在同一服务器上的多个WordPress站点提供服务。所以,我所有的开发站点都在wp配置中有这个。phpdefine( \'WP_PLUGIN_DIR\', \'/www_dev/base-site/wp-content/plugins\' ); define( \'WP_PLUGIN_URL\', \