[英]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.