Deletar Arquivo de Anexo Antigo ao Atualizar Post

FunctionsPHP
O código fornece uma função que deleta o arquivo de anexo antigo de um post específico no WordPress quando o post é atualizado. Se o campo personalizado que contém a URL do anexo for alterado durante a atualização, o anexo antigo será deletado do banco de dados e do servidor.

Como instalar

Copie e cole o código fornecido no arquivo functions.php do seu tema WordPress.

Explicando o código

  1. A função deletar_arquivo_antigo($post_id) é definida para processar a deleção do arquivo de anexo antigo.
  2. Dentro da função, é feita uma verificação para garantir que o $post_id é fornecido, o que indica que é uma atualização de um post existente.
  3. O tipo de post é obtido usando get_post_type($post_id).
  4. Um array associativo $metacampos é definido, mapeando tipos de post para o nome do campo personalizado que contém a URL do anexo.
  5. Verifica-se se o tipo de post atual está no array $metacampos usando array_key_exists($post_type, $metacampos).
  6. Se o tipo de post estiver no array, o nome do campo personalizado é obtido e as URLs do anexo antigo e novo são obtidas usando get_post_meta($post_id, $metacampo, true) e $_POST[$metacampo], respectivamente.
  7. Verifica-se se a URL do anexo foi alterada comparando $anexo_url_anterior e $anexo_url_atual.
  8. Se a URL do anexo foi alterada, o ID do anexo antigo é obtido usando attachment_url_to_postid($anexo_url_anterior), e o anexo antigo é deletado usando wp_delete_attachment($anexo_id_anterior, true).
  9. A função add_action('save_post', 'deletar_arquivo_antigo') é usada para anexar a função deletar_arquivo_antigo($post_id) ao hook save_post, que é acionado sempre que um post é salvo ou atualizado.

Códigos

Functions (php)

				
					// Função para deletar o arquivo antigo de anexo
function lab1_deletar_arquivo_antigo($post_id) {
    // Verifica se o post possui um ID atribuído (atualização de post existente)
    if ($post_id) {
        // Obtém o tipo de post
        $post_type = get_post_type($post_id);

        // Define os metacampos e seus valores correspondentes para exclusão de anexos
        $metacampos = array(
            '_docs-sgq' => '_documento-anexado',
        );

        // Verifica se o tipo de post está definido nos metacampos para exclusão de anexos
        if (array_key_exists($post_type, $metacampos)) {
            $metacampo = $metacampos[$post_type];

            // Obtém o valor do campo personalizado antes da atualização
            $anexo_url_anterior = get_post_meta($post_id, $metacampo, true);

            // Obtém o valor do campo personalizado após a atualização
            $anexo_url_atual = isset($_POST[$metacampo]) ? $_POST[$metacampo] : '';

            // Verifica se o valor do campo personalizado foi alterado
            if ($anexo_url_anterior && $anexo_url_anterior !== $anexo_url_atual) {
                $anexo_id_anterior = attachment_url_to_postid($anexo_url_anterior);
                wp_delete_attachment($anexo_id_anterior, true);
            }
        }
    }
}

// Hook para executar a função quando um post for atualizado
add_action('save_post', 'lab1_deletar_arquivo_antigo');

				
			

Relacionados

Redirecionar para o Próximo Post Após um Número de Segundos Específico

Este código PHP permite redirecionar automaticamente os visitantes...
FunctionsPHP

Redirecionar para o Próximo Post Automaticamente

Este código PHP e JavaScript permite redirecionar automaticamente...
FunctionsPHP

Remover Logo do WP da Página de Login e Barra Admin

Este código remove o logotipo do WordPress da...
FunctionsPHP

Fale com a Lab1