Come posso annullare la prenotazione di una registrazione del nome utente in sospeso?


9

Sto configurando una nuova istanza di WordPress Multisite e sto ancora lavorando su alcuni nodi nello stack. Più significativamente al momento, le e-mail di registrazione degli utenti non vengono recapitate per qualche motivo. Di conseguenza, diversi nomi utente sono bloccati nel limbo poiché le e-mail di conferma necessarie per attivarli vengono perse.

Per ora vorrei solo registrare manualmente questi nomi utente senza e-mail di conferma, ma quando provo a farlo ricevo un errore che dice che il nome è riservato e potrebbe essere disponibile in un paio di giorni. Come posso annullare la prenotazione?

Risposte:


13

Livello di accesso DB ed eliminazione di righe

WordPress usa la wpdbclasse per gestire l'accesso al livello del database usando il global $wpdb. La classe fornisce un metodo denominato delete()per eliminare le righe dalle tabelle:

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

Tabelle multisito e chiavi di attivazione

WordPress ha alcune tabelle specifiche MU , dove si trova {$wpdb->prefix}signups(prefisso impostato nel tuo wp-config.phpfile). Schema delle tabelle qui . Il responsabile dell'attivazione dell'account utente è il activation_key, che viene impostato dopo che l'utente ha fatto clic sul collegamento nella posta. Successivamente, la activatedchiave verrà impostata con un datetimevalore. Prima dell'attivazione dell'account, il valore predefinito sarà 0000-00-00 00:00:00(nel caso in cui sia necessario eseguire una query per impostazione predefinita). Nel processo è presente anche la colonna tinyint/ , che è impostata su se un utente è attivo.1active1

Il core stesso usa wpmu_activate_signup(). Guardalo per alcuni esempi. Uno è il seguente che aggiorna una voce dell'utente per attivarla: rielaborata per essere leggibile.

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

Creazione di una query su account non ancora attivati

Lascia che WP faccia il duro lavoro:

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

È possibile utilizzare il terzo argomento (array) se si utilizza un modulo (n admin) per eseguire tali richieste (ad esempio l'estensione di a WP_List_Table) per indicare che si sta utilizzando una stringa. Tieni presente che devi ancora disinfettare i $_POSTvalori. Suggerimento: è possibile utilizzare user_emailanche.

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

9

Se si desidera una soluzione rapida per l'eliminazione di un'iscrizione nel database per un utente specifico, questo dovrebbe fare quello che si desidera:

/**
 * 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)

Puoi anche usare un plug-in nel repository di WordPress.org chiamato 'Chiavi di attivazione utente' per gestire questo problema mentre stai capendo perché le email non vengono inviate. Ti consente di eliminare o approvare manualmente le chiavi di attivazione per gli utenti in Multisito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.