Last active
July 5, 2024 01:29
-
-
Save dantetesta/5bfc4942b916d8e7d4829feb968b6c90 to your computer and use it in GitHub Desktop.
Deleta User + registros do CPT via relation + midias
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
uso [delete_user] | |
<?php | |
function wpscripts_delete_user_shortcode($atts) { | |
// Extrai os atributos | |
$atts = shortcode_atts(array( | |
'userid' => 0, | |
), $atts, 'delete_user'); | |
// Verifica se o userid foi passado e se o usuário está logado | |
if ($atts['userid'] && is_user_logged_in()) { | |
// URL atual | |
$current_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; | |
// Cria o botão de lixeira com o link para remoção do usuário | |
return '<a href="' . esc_url(add_query_arg(array('delete_user' => $atts['userid']), $current_url)) . '" class="delete-user-link" onclick="return confirmDelete();"> | |
<i class="fa fa-trash"></i> | |
</a>'; | |
} | |
return ''; | |
} | |
add_shortcode('delete_user', 'wpscripts_delete_user_shortcode'); | |
// Adiciona o script de confirmação | |
function wpscripts_confirm_delete_script() { | |
?> | |
<script type="text/javascript"> | |
function confirmDelete() { | |
return confirm("Tem certeza que deseja remover este usuário e todos os seus dados associados?"); | |
} | |
</script> | |
<?php | |
} | |
add_action('wp_footer', 'wpscripts_confirm_delete_script'); | |
function wpscripts_process_delete_user() { | |
// Verifica se o parâmetro delete_user está presente na URL e se o usuário está logado | |
if (isset($_GET['delete_user']) && is_user_logged_in()) { | |
$user_id = intval($_GET['delete_user']); | |
if ($user_id > 0) { | |
global $wpdb; | |
// Recupera os IDs dos registros de exames do usuário na tabela de relações | |
$relations = $wpdb->get_results( | |
$wpdb->prepare( | |
"SELECT child_object_id FROM {$wpdb->prefix}jet_rel_10 WHERE parent_object_id = %d", | |
$user_id | |
) | |
); | |
if ($relations) { | |
foreach ($relations as $relation) { | |
$exame_id = $relation->child_object_id; | |
// Recupera os anexos do CPT 'exames' diretamente do banco de dados | |
$anexos = $wpdb->get_var( | |
$wpdb->prepare( | |
"SELECT meta_value FROM {$wpdb->prefix}postmeta WHERE post_id = %d AND meta_key = '_anexo'", | |
$exame_id | |
) | |
); | |
if ($anexos) { | |
// Separa as URLs em um array | |
$anexos_array = explode(',', $anexos); | |
foreach ($anexos_array as $anexo) { | |
// Remove o arquivo diretamente da pasta usando funções PHP | |
$file_path = str_replace(get_site_url() . '/', ABSPATH, $anexo); | |
if (file_exists($file_path)) { | |
if (!unlink($file_path)) { | |
error_log("Failed to delete file: $file_path"); | |
} | |
} else { | |
error_log("File does not exist: $file_path"); | |
} | |
// Recupera o ID do arquivo a partir da URL usando SQL | |
$attachment_id = $wpdb->get_var( | |
$wpdb->prepare( | |
"SELECT ID FROM {$wpdb->prefix}posts WHERE guid = %s", | |
$anexo | |
) | |
); | |
if ($attachment_id) { | |
// Remove a entrada da mídia usando SQL | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->posts} WHERE ID = %d", | |
$attachment_id | |
) | |
); | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->postmeta} WHERE post_id = %d", | |
$attachment_id | |
) | |
); | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->term_relationships} WHERE object_id = %d", | |
$attachment_id | |
) | |
); | |
} | |
} | |
} | |
// Remove o post do CPT 'exames' usando SQL | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->posts} WHERE ID = %d", | |
$exame_id | |
) | |
); | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->postmeta} WHERE post_id = %d", | |
$exame_id | |
) | |
); | |
} | |
// Remove os registros da tabela de relações | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->prefix}jet_rel_10 WHERE parent_object_id = %d", | |
$user_id | |
) | |
); | |
} | |
// Remove o usuário usando SQL | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->users} WHERE ID = %d", | |
$user_id | |
) | |
); | |
$wpdb->query( | |
$wpdb->prepare( | |
"DELETE FROM {$wpdb->usermeta} WHERE user_id = %d", | |
$user_id | |
) | |
); | |
// Redirecionar para a mesma página sem o parâmetro de deleção | |
wp_redirect(remove_query_arg('delete_user')); | |
exit; | |
} | |
} | |
} | |
add_action('template_redirect', 'wpscripts_process_delete_user'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment