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

9

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

Por enquanto, gostaria de registrar manualmente esses nomes de usuário sem 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 deles?

Kaelin Colclasure
fonte

Respostas:

13

Camada de acesso ao banco de dados e exclusão de linhas

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

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

Tabelas multissite e chaves de ativação

O WordPress tem algumas tabelas específicas de MU , onde uma está {$wpdb->prefix}signups(prefixo definido no seu wp-config.phparquivo). Tabelas de esquema aqui . O responsável pela ativação da conta do usuário é o activation_key, que é definido após o usuário clicar no link no correio. Depois disso, a activatedchave será definida com um datetimevalor. Antes de a conta ser ativada, o valor padrão será 0000-00-00 00:00:00(caso você precise consultar o padrão). Também no processo está a coluna tinyint/ , que é definida como se um usuário estiver ativo.1active1

O próprio núcleo usa wpmu_activate_signup(). Veja alguns exemplos. Um é o seguinte que atualiza uma entrada do 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, )
);

Construindo uma consulta em contas ainda não ativadas

Simplesmente deixe o WP fazer o trabalho duro:

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 a WP_List_Table) para indicar que está usando uma string. Lembre-se de que você ainda deve higienizar os $_POSTvalores. Dica: você também pode usar o user_email.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
kaiser
fonte
9

Se você deseja uma solução rápida para excluir uma inscrição no banco de dados para um usuário específico, faça o que 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 plug-in no repositório do WordPress.org chamado 'Chaves de ativação do usuário' para gerenciar esse problema enquanto descobre por que os emails não estão sendo enviados. Permite excluir ou aprovar manualmente chaves de ativação para usuários no Multisite.

DrewAPicture
fonte