删除所有页面(千页),但按ID删除少数页面

时间:2021-06-08 作者:shireef khatab

我有超过2万页,需要删除除极少数以外的所有页面。从wp管理页面删除它们将花费太长时间和巨大的工作量。是否有可以在PhpMyAdmin中运行的命令来执行此任务?

假设我想保留ID为(1,2,3)的页面,并删除其余页面。

非常感谢。

2 个回复
SO网友:Buttered_Toast

你可以这样做

if (current_user_can(\'administrator\')) {
    $pages = get_posts([
        \'post_type\' => \'page\', // get only pages
        \'posts_per_page\' => -1, // get all
        \'post_status\' => array_keys(get_post_statuses()), // all post statuses (publish, draft, private etc...)
        \'post__not_in\' => [8,18,15,16,17] // list of ids you want to exclude (pages not for deletion)
    ]);

    foreach ($pages as $page) {
        wp_delete_post($page->ID); // delete page (moves to trash)
    }   
}
如果您想在不使用wp-cli的情况下快速完成某些操作。

当我需要快速一次性删除某些内容时,我有时会使用此选项。

您可以将此代码放入,header.php (对于这个XD可能会被烧掉),然后进入你的站点,这个代码将只对管理员级别的用户执行。

它将检索您要删除的所有页面并将其删除。

在里面post__not_in => [pages_ids_here] 放置所有不想删除的页面ID。

wp_delete_post($page->ID) 将执行软删除,将其移动到垃圾箱,如果要永久删除页面,请使用此wp_delete_post($page->ID, true) (不建议立即恢复,因为除非进行了DB备份,否则无法恢复它们)。

在运行此代码之前,请检查$pages包含的内容,以查看是否获得了正确的页面,一旦确定这些页面是正确的页面,就可以删除它们。

如果你能做一个DB备份以防出错。

删除所有页面后,立即删除此代码,以防止将来删除未连接的页面。

SO网友:shireef khatab

我发现先清空垃圾箱,然后清空我想保留的页面,然后通过wp cli永久删除所有页面更容易(使用--force标志跳过垃圾箱)

https://developer.wordpress.org/cli/commands/post/delete/

然后还原少数被丢弃的页面。希望这能帮助别人。

相关推荐

在不破坏比较修订工具的情况下通过phpMyAdmin编辑帖子的正确方法

在我网站上的数百篇帖子中,一个特定的字符串需要被另一个字符串替换,但这个替换只能在发布的帖子上执行,而不能在修订版上执行。我找到的插件(search&replace、better search replace等)没有此功能,因此必须使用phpMyAdmin完成这项工作。这可以通过此查询完成UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, \'tobereplaced\', \'replacement\') WHERE po