¿Cómo puedo cancelar la reserva de un registro de nombre de usuario pendiente?

9

Estoy configurando una nueva instancia de WordPress Multisite, y todavía estoy resolviendo algunos problemas en la pila. Lo más importante en este momento, los correos electrónicos de registro de usuarios no se entregan por alguna razón. Como resultado, varios nombres de usuario están atrapados en el limbo a medida que se pierden los correos electrónicos de confirmación necesarios para activarlos.

Por ahora, me gustaría registrar manualmente estos nombres de usuario sin correos electrónicos de confirmación, pero cuando trato de hacerlo, aparece un error que dice que el nombre está reservado y puede estar disponible en un par de días. ¿Cómo puedo cancelar mi reserva?

Kaelin Colclasure
fuente

Respuestas:

13

Capa de acceso a la base de datos y eliminación de filas

WordPress usa la wpdbclase para administrar el acceso a la capa de la base de datos usando global $wpdb. La clase proporciona un método llamado delete()para eliminar filas de las tablas:

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

Tablas multisitio y claves de activación

WordPress tiene algunas tablas específicas de MU , donde está una {$wpdb->prefix}signups(prefijo establecido en su wp-config.phparchivo). Esquema de tablas aquí . El responsable de la activación de la cuenta de usuario es el activation_key, que se configura después de que el usuario hizo clic en el enlace del correo. Después de eso, la activatedclave se establecerá con un datetimevalor. Antes de activar la cuenta, el valor predeterminado será 0000-00-00 00:00:00(en caso de que necesite consultar el valor predeterminado). También en el proceso está la columna tinyint/ , que se establece en si un usuario está activo.1active1

El núcleo mismo usa wpmu_activate_signup(). Míralo para ver algunos ejemplos. Una de ellas es la siguiente que actualiza una entrada de usuario para activarla, modificada para facilitar la lectura.

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

Creación de una consulta contra cuentas aún no activadas

Simplemente deje que WP haga el trabajo duro:

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

Podría usar el tercer argumento (matriz) si está usando un formulario (n admin) para realizar esas solicitudes (por ejemplo, extender a WP_List_Table) para indicar que está usando una cadena. Tenga en cuenta que aún debe desinfectar los $_POSTvalores ed. Sugerencia: también puedes usar el user_email.

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

Si desea una solución rápida para eliminar un registro en la base de datos para un usuario específico, debe hacer lo que desea:

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

También puede usar un complemento en el repositorio de WordPress.org llamado 'Claves de activación de usuario' para gestionar este problema mientras se da cuenta de por qué no se envían correos electrónicos. Le permite eliminar o aprobar manualmente las claves de activación para los usuarios en Multisite.

DrewAPicture
fuente