Existe alguma maneira de verificar se existe um ID de usuário? Eu quero criar uma função semelhante a, username_exists()
mas que retorna se o ID existe ou não.
12
Use esta função:
function user_id_exists($user){
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d", $user));
if($count == 1){ return true; }else{ return false; }
}
Uso:
if(user_id_exists(1)){
//it does exists
} else {
//it doesn't
}
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
Eu recomendo a solução muito mais simples de Daniel sobre a atualmente selecionada como correta:
fonte
$user_ids = array_filter( $user_ids, 'get_userdata' );
Nesse caso, definitivamente não usarei o get_userdata ($ user_id) enquanto estiver retornando um WP_User, portanto, é mais ganancioso do que apenas uma consulta personalizada.
Sobre a consulta, concordo em usar o método prepare, mas o SELECT COUNT (*) significa que você está retornando todas as colunas , o que é inútil aqui.
Eu recomendaria o uso de SELECIONAR CONTAGEM (ID) não- estável, dessa maneira, estamos trabalhando apenas em uma única coluna que será mais rápida.
Em outro aspecto da declaração de retorno, seria mais legível com uma lógica ternária como:
Para resumir, eu teria implementado como:
fonte
SELECT COUNT(*)
eSELECT COUNT(ID)
ambos retornam uma única coluna ... uma contagem.Se o desempenho for uma preocupação, use:
Caso contrário, use
get_userdata($user_id) !== false
. A chamada paraget_userdata
recuperará uma linha inteira do banco de dados em vez de um único valor, criará um novo objeto WP_User e o armazenará em cache com êxito.fonte
Tente isto não exibirá o aviso como Argumento ausente 2 para wpdb :: prepare ()
fonte
return $count == 1;
Algo que é feito por pelo menos alguns hackers (eu sei porque fui vítima disso pelo menos uma vez) é visitar seu site usando esse tipo de URL
etc.
Em uma tentativa bem-sucedida, a saída do site terá dados válidos; além disso, o nome do usuário estará no conteúdo do site e o apelido também estará lá (dependendo da saída das páginas).
Em uma tentativa inválida, o site irá para a página 404 (ou o que estiver definido para ocorrer em um erro de página não encontrada).
Pode ser bastante trivial criar um script usando cURL que pode testar desde digamos author = 0 até author = 999 em um período de tempo relativamente curto e gerar uma lista de nomes de usuários. Eu tive um hacker para fazer isso em um dos meus sites e, em seguida, tente fazer login em cada usuário usando outra lista de senhas populares.
Como você pode imaginar na primeira vez que isso acontece, é um pouco assustador ver que alguém pode facilmente descobrir todos os seus nomes de usuário. Para minha sorte, senhas fortes salvaram o dia naquele momento, tenho certeza que nem todo mundo tem tanta sorte.
Eu testei isso em alguns sites de grandes nomes (que permanecerão sem nome neste post) e parece que ainda não há nada que alguém possa fazer para impedir que isso aconteça. Pessoalmente, acho que é risco de segurança que o wordpress feche.
EDIT :
Aqui no futuro (início de 2016) agora eu sei que existem métodos / plugins que podem impedir esse ataque de enumeração de usuários. Além disso, mudei minha posição sobre o risco de segurança disso e não acho mais que o WordPress deva mudar isso.
fonte