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

8

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 algún motivo. Como resultado, varios nombres de usuarios quedan bloqueados en el limbo, ya que se pierden los correos electrónicos de confirmación necesarios para activarlos.

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

    
pregunta Kaelin Colclasure 08.09.2014 - 15:59

2 respuestas

11

Capa de acceso a DB & eliminando filas

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

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

Tablas multisitio & claves de activación

WordPress tiene algunas tablas específicas de MU , donde una es {$wpdb->prefix}signups (prefijo establecido en su wp-config.php expediente). Esquema de tablas aquí . El responsable de la activación de la cuenta de usuario es el activation_key , que se establece después de que el usuario haga clic en el enlace del correo. Después de eso, la clave activated se establecerá con un valor datetime . Antes de que se active 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á el tinyint / 1 column active , que se establece en 1 si un usuario está activo.

Core utiliza wpmu_activate_signup() . Míralo para ver algunos ejemplos. Una de las siguientes es que actualiza una entrada de usuario para activarla: se ha reelaborado para facilitar la lectura.

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

Crear una consulta contra cuentas aún no activadas

Simplemente deja que WP haga el trabajo duro:

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

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

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

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 quiera:

/**
 * 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 puedes usar un complemento en el repositorio de WordPress.org llamado 'Claves de activación de usuario' para manejar este problema mientras descubres por qué no se envían los correos electrónicos. Le permite eliminar o aprobar manualmente las claves de activación para los usuarios de Multisite.

    
respondido por el DrewAPicture 08.09.2014 - 16:30

Lea otras preguntas en las etiquetas