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

Cha*_* Mc 3 mysql sql database wordpress

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

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'
LIMIT 0 , 3000
Run Code Online (Sandbox Code Playgroud)

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

vee*_*vee 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);
Run Code Online (Sandbox Code Playgroud)

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


Cha*_* Mc 6

解决了 -

DELETE FROM `wp_posts`
WHERE  `post_type` =  'prefix-numberplates'
Run Code Online (Sandbox Code Playgroud)

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

  • 你不是通过运行这个查询来删除post元,你会在你的数据库中留下很多垃圾. (18认同)

小智 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';
Run Code Online (Sandbox Code Playgroud)

只需将“post_type_name”更改为您要删除的 cpt 即可。还可以在适当的情况下更改表名称前缀。