3

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

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

wp_posts 和 post_type 周围有`,但它不会让我在这里设置它们的样式。任何帮助是极大的赞赏。

4

6 回答 6

9
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 表中删除。它在数据库中没有留下任何垃圾。

于 2017-04-05T09:08:08.120 回答
7

解决了 -

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'

工作 - 把底部拿出来,很好。

于 2012-08-23T06:21:28.850 回答
5

以下内容从 posts、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。还要在适当的地方更改表名前缀。

于 2017-12-14T22:13:36.893 回答
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);
于 2013-12-24T16:23:32.087 回答
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"
于 2017-12-06T20:39:41.680 回答
-1

尝试使用 $wpdb 类。

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

$wpdb->query($query);
于 2012-07-21T16:08:39.150 回答