删除由‘订阅者’角色上传的图像

时间:2016-07-05 作者:Phill Healey

我继承了一个设计非常糟糕的WordPress站点,该站点部分使用BuddyPress作为目录类型部分。用户可以将配置文件图像和“产品”图像上载到其配置文件中。

因此,我们现在在网站上有大约20GB的图像,迫切需要减少这一数量。当用户停止向运营该网站的慈善机构支付会员费时,用户角色将从多个自定义角色之一更改为WP“订户”角色。

我希望有一种相当简单和准确的方法来查找与一个或多个用户配置文件关联的图像,然后删除这些图像(如果用户具有“订阅者”角色)。

目前,我还没有尝试过这方面的任何东西,我希望有更多WP开发经验的人能够给我一些关于如何实现这一点的提示/建议。

提前谢谢。

2 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

下面是一些代码,它提取所有订阅者ID,然后从这些订阅者中提取所有附件并尝试删除它们。如果无法删除它们,它将写入错误日志,让您知道。

$subscribers = get_users( array(
    \'role\'  => \'subscriber\',
    \'fields\'=> \'ID\',
) );

if( ! empty( $subscribers ) ) {

    $files = new WP_Query( array(
        \'post_type\'         => \'attachment\',
        \'posts_per_page\'    => 200,
        \'author\'            => implode( \',\', $subscribers ),
        \'fields\'            => \'ids\',
    ) );

    if( ! empty( $files ) ) {
        foreach( $files->posts as $attachment_id ) {
            $deleted = wp_delete_attachment( $attachment_id, true );

            if( ! $deleted ) {
                error_log( "Attachment {$deleted} Could Not Be Deleted!" );
            }
        }
    }
}
很有可能,您的附件数量会超过服务器在同一时间可以处理的加载量,因此您可能会多次达到200个限制,但一些页面刷新(或实际的偏移量/分页脚本)就可以做到这一点。

SO网友:Conor

你需要做一个SELECT 针对wp_postswp_users 表以获取所有符合条件的文件名的列表。然后在中手动删除它们uploads 文件夹如果它在Linux服务器上,我会创建一个BASH 一次将它们全部删除的脚本。