首页 文章

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

提问于
浏览
2

我使用'自定义帖子类型'设置了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 回答

  • -1
    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中留下任何垃圾 .

  • 6

    这种方式可以确保您获得正确的表 - $ wpdb最了解:)

    // delete CPT posts ##
    global $wpdb;
    
    $posts_table = $wpdb->posts;
    
    $query = "
      DELETE FROM {$posts_table}
      WHERE post_type = 'post_type_name' 
    ";
    
    $wpdb->query($query);
    
  • 6

    解决了 -

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

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

  • 1

    以下内容从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即可 . 同时在适当的位置更改表名前缀 .

  • 1
    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"
    
  • 0

    尝试使用$ wpdb类 .

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

相关问题