Como posso cancelar a reserva de um registro de nome de usuário pendente?

8

Estou configurando uma nova instância do WordPress Multisite e ainda estou trabalhando com alguns problemas na pilha. Mais significativamente no momento, os e-mails de registro de usuários não estão sendo entregues por algum motivo. Como resultado, vários nomes de usuários ficam presos no limbo à medida que os e-mails de confirmação necessários para ativá-los são perdidos.

Por enquanto, gostaria apenas de registrar manualmente esses nomes de usuário sem receber e-mails de confirmação, mas quando tento fazer isso, recebo um erro dizendo que o nome está reservado e pode estar disponível em alguns dias. Como posso cancelar a reserva?

    
por Kaelin Colclasure 08.09.2014 / 15:59

2 respostas

11

Camada de acesso ao banco de dados & excluindo linhas

O WordPress usa a classe wpdb para gerenciar o acesso à camada de banco de dados usando o global $wpdb . A classe fornece um método chamado delete() para excluir as linhas das tabelas:

$wpdb->delete( $table, $where, $where_format = null );

Tabelas multisite & chaves de ativação

O WordPress tem algumas tabelas específicas de MU , onde uma é {$wpdb->prefix}signups (prefixo definido no seu wp-config.php Arquivo). Esquema das tabelas aqui . Responsável pela ativação da conta de usuário é o activation_key , que é definido após o usuário clicar no link no e-mail. Depois disso, a chave activated será definida com um valor datetime . Antes de a conta ser ativada, o valor padrão será 0000-00-00 00:00:00 (no caso de você precisar consultar o padrão). Também no processo está o tinyint / 1 column active , que é definido como 1 se um usuário estiver ativo.

O próprio Core usa wpmu_activate_signup() . Veja alguns exemplos. Um é o seguinte que atualiza uma entrada de usuário para ativá-la - retrabalhada para facilitar a leitura.

$wpdb->update(
    $wpdb->signups,
    array(
        'active'    => 1,
        'activated' => current_time( 'mysql', true ),
    ),
    array( 'activation_key' => $key, )
);

Criando uma consulta em contas ainda não ativadas

Simplesmente deixe o WP fazer o trabalho pesado:

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', )
);

Você pode usar o terceiro argumento (matriz) se estiver usando um formulário (n admin) para executar essas solicitações (por exemplo, estendendo um WP_List_Table ) para indicar que está usando uma string. Lembre-se de que você ainda deve limpar os valores de $_POST ed. Dica: você também pode usar o user_email .

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
    
por kaiser 08.09.2014 / 17:28
7

Se você quiser uma solução rápida para excluir uma inscrição no banco de dados de um usuário específico, isso deve fazer o que você deseja:

/**
 * Delete a row in the signups table for a given username.
 *
 * @param string $user_login Username.
 * @return bool Whether the signup row was successfully deleted.
 */
function delete_activation_key_by_user( $user_login ) {
    global $wpdb;

    $success = false;

    if ( false !== $wpdb->delete( $wpdb->signups, array( 'user_login' => sanitize_text_field( $user_login ) ) ) ) {
        $success = true;
    }
    return $success;
}

var_dump( delete_activation_key_by_user( 'the_username' ) );
// bool(true|false)

Você também pode usar um plugin no repositório do WordPress.org chamado 'User Activation Keys' para gerenciar esse problema enquanto descobre porque os e-mails não estão sendo enviados. Ele permite excluir ou aprovar manualmente as chaves de ativação para usuários no Multisite.

    
por DrewAPicture 08.09.2014 / 16:30