2012-07-21 33 views
1

我已經設置了使用'自定義帖子類型'的wordpress/mysql,它目前在數據庫的wp_posts表中保存了約40,000行數據。我試圖處理一個SQL查詢,它將一次去除某個自定義帖子類型的所有行,但它一直告訴我我有一個語法錯誤。我使用的代碼如下,如果它很簡單,但是SQL對我來說是陌生的,我很難在論壇中找到任何東西。wordpress mysql - 刪除所有自定義帖子類型

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

有`各地wp_posts & post_type但它不會讓我他們的風格就在這裏。 任何幫助,不勝感激。

+0

查詢看起來很好。你的錯誤信息是什麼?如果您是從命令行執行此操作,您是否首先使用? – Rob 2012-07-21 02:31:21

回答

5

解決 -

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

工作 - 把底部出來&感覺不錯。

+15

您不會通過運行此查詢來移除後期元,您將在數據庫中留下大量垃圾。 – 2014-03-25 11:26:06

-1

嘗試使用$ wpdb類。

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

$wpdb->query($query); 
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
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中留下垃圾。

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

下從帖子,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。 在適當的位置還要更改表名前綴。

相關問題