wordpress mysql - 删除所有自定义帖子类型

时间:2012-07-21 00:33:46

标签: mysql sql database wordpress

我使用'自定义帖子类型'设置了wordpress / mysql,它目前在数据库的wp_posts表中保存了大约40,000行数据。我正在尝试一个SQL查询,它将一次删除某个自定义帖子类型的所有行,但它一直告诉我,我有一个语法错误。我正在使用的代码如下所示,如果它很简单就道歉,但SQL对我来说很陌生,我很难在论坛中找到任何东西。

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'
LIMIT 0 , 3000

周围有wp_posts& post_type但它不会让我在这里设置样式。 非常感谢任何帮助。

6 个答案:

答案 0 :(得分:7)

global $wpdb;

// delete all posts by post type.
$sql = 'DELETE `posts`, `pm`
    FROM `' . $wpdb->prefix . 'posts` AS `posts` 
    LEFT JOIN `' . $wpdb->prefix . 'postmeta` AS `pm` ON `pm`.`post_id` = `posts`.`ID`
    WHERE `posts`.`post_type` = \'prefix-numberplates\'';
$result = $wpdb->query($sql);

这将从帖子和postmeta表中删除。它没有在db中留下任何垃圾。

答案 1 :(得分:6)

解决了 -

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'
工作 - 把底部拿出来&很好。

答案 2 :(得分:2)

以下内容从帖子,postmeta和term_relationships表中删除:

DELETE p,tr,pm
    FROM wp_posts p
    LEFT JOIN wp_term_relationships tr
        ON (p.ID = tr.object_id)
    LEFT JOIN wp_postmeta pm
        ON (p.ID = pm.post_id)
    WHERE p.post_type = 'post_type_name';

只需将'post_type_name'更改为您要删除的cpt即可。 同时更改表名前缀。

答案 3 :(得分:1)

这样可以确保您获得正确的表格 - $ wpdb最了解:)

// delete CPT posts ##
global $wpdb;

$posts_table = $wpdb->posts;

$query = "
  DELETE FROM {$posts_table}
  WHERE post_type = 'post_type_name' 
";

$wpdb->query($query);

答案 4 :(得分:0)

delete p,m from wp_posts p left join wp_postmeta m on p.ID = m.post_id where p.post_type = "my_custom_post_type"

答案 5 :(得分:-1)

尝试使用$ wpdb类。

$query = "
DELETE FROM wp_posts 
WHERE post_type = 'prefix-numberplates' 
LIMIT 0, 3000
";

$wpdb->query($query);