Exclua as imagens enviadas pela função 'Assinante'

4

Eu herdei um site WordPress muito mal projetado que, em parte, usa o BuddyPress para uma seção de tipo de diretório. Os usuários podem fazer upload de imagens de perfil e imagens de "produtos" para o perfil deles.

Como resultado, agora temos cerca de 20 GB de imagens no site e precisamos desesperadamente reduzir isso. Quando os usuários deixam de pagar uma taxa de associação à instituição que executa o site, a função de usuário é alterada de uma das várias funções personalizadas para a função "Assinante" do WP.

Minha esperança é que haja uma maneira bastante simples e precisa de encontrar imagens associadas a um perfil de usuário ou usuário e, em seguida, excluir essas imagens se os usuários tiverem a função 'Assinante'.

No momento, eu não tentei nada nesse sentido, e espero que alguém com mais experiência em WP dev possa me dar algumas dicas / sugestões sobre como abordar isso.

Obrigado antecipadamente.

    
por Phill Healey 05.07.2016 / 12:50

2 respostas

2

Aqui está um código que extrai todos os IDs de assinante, depois extrai todos os anexos desses assinantes e tenta excluí-los. Se não conseguir eliminá-los, ele irá gravar no log de erros informando a você.

$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!" );
            }
        }
    }
}

É provável que você tenha mais anexos do que o seu servidor pode manipular ao mesmo tempo, então você provavelmente atingirá o limite de 200 algumas vezes, mas algumas atualizações de página (ou um script de deslocamento / paginação real) farão o truque .

    
por Howdy_McGee 10.09.2016 / 23:42
0

Você precisaria fazer uma instrução SELECT nas tabelas wp_posts e wp_users para obter uma lista de todos os nomes de arquivos qualificados. Em seguida, exclua-os manualmente na pasta uploads . Se estiver em um servidor Linux, criaria um script BASH para removê-los todos de uma vez.

    
por Conor 05.07.2016 / 14:42