Login desde el front, redirect y otras cosas de registro

Login / Registro desde el frontend.

Si estamos en una tienda con WooCommerce, el plugin ya dispone en el core de un shortcode para ello: [woocommerce_my_account]

Redirect.

Para WordPress, disponemos del plugin Peter’s Login Redirect que nos permite indicar las urls destino tras el login/logout o registro.

Misteriosamente Peter’s no funciona con el login/registro de WooCoommerce, por lo que he creado un sencillo plugin con los filtros necesarios: ablancodev_woocommerce_redirect, disponible en GitHub.

Aprobar nuevos usuarios

Para aprobar o rechazar nuevos usuarios, podemos usar el plugin New User Approve.

Este plugin por defecto manda el email de notificación al admin del website. Si queremos cambiarlo, podemos usar su filtro ‘new_user_approve_email_admins’, por ejemplo:

add_filter('new_user_approve_email_admins', 'ablancodev_new_user_approve_email_admins', 10, 1);
function ablancodev_new_user_approve_email_admins( $array_emails ) {
  return array('email1@dominio.com', 'email2@dominio.com');
}

Vitaminando el registro

En muchas ocasiones vamos a necesitar añadir campos personalizados en el registro, y tenemos 2 opciones de hacerlo: mediante código, o mediante plugin.

Mediante código:

Un ejemplo de código puede ser:

function ablancodev_extra_register_fields() {
?>
    <p class="form-row form-row-wide">
    <label for="reg_billing_first_name">Nombre de la empresa<span class="required">*</span></label>
    <input type="text" class="input-text" name="billing_company" id="reg_billing_company" value="<?php if ( ! empty( $_POST['billing_company'] ) ) esc_attr_e( $_POST['billing_company'] ); ?>" />
    </p>
    <p class="form-row form-row-first">
    <label for="reg_billing_phone">CIF<span class="required">*</span></label>
    <input type="text" class="input-text" name="billing_vat_number" id="reg_billing_vat_number" value="<?php esc_attr_e( $_POST['billing_vat_number'] ); ?>" />
    </p>
    <p class="form-row form-row-last">
    <label for="reg_billing_phone">Teléfono de contacto<span class="required">*</span></label>
    <input type="text" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php esc_attr_e( $_POST['billing_phone'] ); ?>" />
    </p>
    <p class="form-row form-row-wide">
    <label for="reg_billing_last_name">Nombre de la persona de contacto</label>
    <input type="text" class="input-text" name="contact_first_name" id="reg_billing_first_name" value="<?php if ( ! empty( $_POST['contact_first_name'] ) ) esc_attr_e( $_POST['contact_first_name'] ); ?>" />
    </p>
    <div class="clear"></div>
<?php
}
add_action( 'woocommerce_register_form_start', 'ablancodev_extra_register_fields' );

function ablancodev_save_extra_register_fields( $customer_id ) {
    if ( isset( $_POST['billing_phone'] ) ) {
        update_user_meta( $customer_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) );
    }
    if ( isset( $_POST['billing_vat_number'] ) ) {
        update_user_meta( $customer_id, 'billing_vat_number', sanitize_text_field( $_POST['billing_vat_number'] ) );
    }
    if ( isset( $_POST['billing_company'] ) ) {
        update_user_meta( $customer_id, 'billing_company', sanitize_text_field( $_POST['billing_company'] ) );
    }
    if ( isset( $_POST['contact_first_name'] ) ) {
        update_user_meta( $customer_id, 'contact_first_name', sanitize_text_field( $_POST['contact_first_name'] ) );
    }
}
add_action( 'woocommerce_created_customer', 'ablancodev_save_extra_register_fields' );

El artículo del que he sacado el código, y que está muy completito es este: https://www.cloudways.com/blog/add-woocommerce-registration-form-fields/

Mediante plugin:

Hay muchos plugins para ello, pero el que he trasteado y me ha sido de solución, lo podemos encontrar en la store de WooCommerce, es: Custom User Registration fields for Woocommerce. Vale, son $49, pero dependiendo del proyecto, tiene todo el sentido gastarlos.