Skip to content

Instantly share code, notes, and snippets.

@dantetesta
Created November 6, 2024 14:36
Show Gist options
  • Save dantetesta/e42e8f9ad5e10e63277da7cbfb661eec to your computer and use it in GitHub Desktop.
Save dantetesta/e42e8f9ad5e10e63277da7cbfb661eec to your computer and use it in GitHub Desktop.
Remoção user - Exames - Subpasta
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()) {
// Link de deleção do usuário, que redireciona para o processamento
$delete_url = esc_url(add_query_arg(array(
'delete_user' => $atts['userid'],
'nonce' => wp_create_nonce('wpscripts_delete_user_nonce')
), home_url('/sistema/dashboard')));
// Botão de exclusão do usuário
return '<a href="' . $delete_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');
// Função de processamento de exclusão do usuário
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() && isset($_GET['nonce']) && wp_verify_nonce($_GET['nonce'], 'wpscripts_delete_user_nonce')) {
$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) {
$anexos_array = explode(',', $anexos);
foreach ($anexos_array as $anexo) {
$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");
}
$attachment_id = $wpdb->get_var(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->prefix}posts WHERE guid = %s",
$anexo
)
);
if ($attachment_id) {
$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
)
);
}
}
}
$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
)
);
}
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->prefix}jet_rel_10 WHERE parent_object_id = %d",
$user_id
)
);
}
$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 /sistema/dashboard após a exclusão
wp_redirect(home_url('/sistema/dashboard'));
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