簡體   English   中英

如何從 WordPress 數據庫中刪除大量帖子

[英]How to delete a large number of post from WordPress database

在 WordPress woocommerce 網站中,我有自定義 post_type klaviyo_shop_cart = =1137717 個我不需要的帖子,所以我決定從我的數據庫中刪除它們。 為此,我嘗試了一些插件,但由於限制,我未能刪除它們。

我的 PHP 方法只能處理 3000 個刪除后我無法增加這些數字。 如果我增加它會顯示 500 錯誤。

<?php
$number = 3000 ;
$mycustomposts = get_posts( 
        array( 
        'post_type' => 'klaviyo_shop_cart', 
        'numberposts' => $number
        )
    );

    foreach( $mycustomposts as $mypost ) {
     // Delete's each post.
    wp_delete_post( $mypost->ID, true);
    // Set to False if you want to send them to Trash.
    }
    echo '<h3 style=:"color:red;"> DELETED!</h3>' . $number ;

?>

它的速度非常慢,一次刪除 3000 個帖子。 所以我想嘗試使用下面的 sql 查詢來刪除帖子。 我知道我不能一次刪除1137717個帖子,所以我需要一個更好的解決方案。 我的問題是有什么方法可以在單個查詢中刪除50000嗎?

DELETE FROM wp_posts WHERE post_type='klaviyo_shop_cart';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT id FROM wp_posts);

我從這里找到了這個

如此龐大的帖子數量可以一次刪除50000個帖子的批量刪除操作。

選擇要檢查的數據

SELECT DISTINCT ID, post_title, post_type, post_status, d.taxonomy, e.name
FROM wp_filn_posts a
LEFT JOIN wp_filn_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_filn_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_filn_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_filn_terms e ON ( e.term_id = d.term_id )
WHERE a.post_type = 'klaviyo_shop_cart'

滿意就刪

DELETE a,b,c
FROM wp_filn_posts a
LEFT JOIN wp_filn_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_filn_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_filn_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_filn_terms e ON ( e.term_id = d.term_id )
WHERE a.post_type = 'klaviyo_shop_cart' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM