Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dantetesta/5bfc4942b916d8e7d4829feb968b6c90 to your computer and use it in GitHub Desktop.
Save dantetesta/5bfc4942b916d8e7d4829feb968b6c90 to your computer and use it in GitHub Desktop.
Deleta User + registros do CPT via relation + midias
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