WooCommerce: Assegnare specifico ruolo dopo registrazione

Tempo di lettura: 4 minuti

WooCommerce permette agli utenti di effettuare la registrazione direttamente dalla pagina dell’account.

Per fare ciò è necessario abilitare l’impostazione presente in WooCommerce — Impostazioni — Account e privacy — mettendo il flag su Permetti ai clienti di creare un account nella pagina “Il mio account”.

registrazione WooCommerce

In questo modo, aprendo la pagina dell’account (di default /mio-account) possiamo visualizzare il form della registrazione al di sotto o a fianco di quello del login, dipende da come è strutturato il tema che stiamo utilizzando.

form registrazione woocommerce

Di default, WooCommerce, una volta che l’utente si è registrato assegna automaticamente il ruolo di CLIENTE all’utente, o più precisamente CUSTOMER.

Volendo è possibile cambiare il ruolo di default CLIENTE con uno specifico inserendo questo codice nel functions.php

add_filter( 'woocommerce_new_customer_data', 'cambio_ruolo_default_registrazione_utente' );

function cambio_ruolo_default_registrazione_utente( $data ){
    $data['role'] = 'subscriber'; // lo slug del nuovo ruolo
    return $data;
}

Bisogna cambiare alla riga 4 ‘subscriber’ con lo slug del ruolo che desideriamo venga assegnato l’utente.

cliente

E fin qui tutto normale, ma se volessimo invece, permettere all’utente di scegliere con quale ruolo registrarsi? Magari abbiamo un E-commerce B2B e abbiamo la necessità di differenziare le registrazioni e di conseguenza agli utenti devono essere incasellati correttamente.

Facciamo un esempio reale: abbiamo un e-commerce che vende prodotti e servizi per la cura dei capelli e allo stesso tempo possediamo un salone dove pratichiamo attivamente il mestiere del barbiere.

Quindi tratto sia con clienti privati e con collaboratori esterni, professionisti a loro volta, a cui vendo alcuni dei miei prodotti professionali (che poi rivendono). In questo caso il prezzo è all’ingrosso in quanto devono poi rivenderlo.

Sul sito non posso mostrare gli stessi prezzi anche al cliente finale, quindi posso fare in modo che, in base al ruolo che ha l’utente, possa vedere prezzi specifici.

In questo modo, in base alla registrazione dell’utente (sceglie lui sotto che profilo registrarti), automaticamente ho “l’iscritto” al posto giusto.

Esistono già dei plugin che permettono la gestione del B2B in WooCommerce, ma se non abbiamo bisogno di funzionalità troppo avanzate, questa procedura è più che sufficiente.

In questo specifico caso andremo ad inserire un menù a tendina all’interno del form di registrazione chiedendo all’utente sotto che profilo registrarsi, o CLIENTE, o PROFESSIONISTA.

Per praticità vi consiglio di creare i 2 nuovi ruoli così da avere tutto ben pulito, o meglio, dato che WooCommerce ha già di default il ruolo CLIENTE, quello lo manterremo, dovremmo solo tradurlo perchè altrimenti mostrerebbe CUSTOMER; creeremo solo il nuovo ruolo PROFESSIONISTA.

Come rinominare il ruolo CUSTOMER

Per prima cosa installiamo il plugin User Role Editor. Rechiamoci in Utenti — User Role Editor.

Selezioniamo l’utente Cliente (Customer), clicchiamo su Rinomina ruolo e in Mostra nome ruolo modifichiamo il nome con quello desiderato, in questo caso Cliente.

rinomina ruolo user role editor

Come aggiungere il nuovo ruolo PROFESSIONISTA

Clicchiamo su Aggiungi ruolo, inseriamo Professionista nei primi 2 campi e, importante, nell’ultimo selezioniamo Customer, così ci farà una copia esatta del ruolo Cliente (così da mantenere gli stessi permessi e privilegi).

Clicchiamo su Aggiungi ruolo e avremo il nostro nuovo RUOLO.

aggiungi ruolo user role editor

A questo punto dobbiamo aggiungere il campo per la scelta all’interno del form di registrazione.

Come inserire il campo aggiuntivo per la scelta

Inserire questo codice all’interno del file functions.php:

function aggiungi_campi_personalizzati_registrazione() {
    global $wp_roles;
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_billing_phone">Desidero registrarmi come:</label>
        <select name="role" class="input">
            <option value="-">-</option>
            <?php
            foreach ($wp_roles->roles as $key => $value) {
                // Escludo tutti i ruoli tranne CLIENTE e PROFESSIONISTA
                if (!in_array($value['name'], [ 'Administrator', 'Author', 'Editor', 'Contributor', 'Subscriber', 'Shop manager'])) {
                    echo '<option value="' . $key . '">' . $value['name'] . '</option>';
                    print_r($value);
                }
            }
            ?>
        </select>
    </p>
    <?php
}

add_action('woocommerce_register_form_start', 'aggiungi_campi_personalizzati_registrazione');

Una volta che l’utente clicca su Registrati dobbiamo incasellare l’utente al posto giusto, questo codice permette di inserire l’utente al ruolo scelto

add_action('woocommerce_created_customer', 'assegno_utente_al_ruolo_dopo_registrazione');

function assegno_utente_al_ruolo_dopo_registrazione($user_id) {
    $user_id = wp_update_user(array('ID' => $user_id, 'role' => $_POST['role']));
}

add_action('woocommerce_register_form_start', 'assegno_utente_al_ruolo_dopo_registrazione');

Il risultato dovrebbe essere questo

ruolo utente registrazione

Provando a registrarmi e selezionando per esempio Professionista, dopo la registrazione vengo correttamente assegnato al ruolo giusto.

utente creato

professionista scelta

Come funziona il codice?

Alla riga 5 scriviamo il testo che appare appena sopra il menù a tendina, quindi possiamo modificare:

<label for=”reg_billing_phone”>Desidero registrarmi come:</label>

con

<label for=”reg_billing_phone”>Mi registro come:</label>

Alla riga 11 vengono esclusi tutti i ruoli eccetto quelli appena creati. Questo perchè, se non mettessimo il controllo, nel menù a tendina apparirebbero tutti i ruoli, ma noi vogliamo mostrare solo CLIENTE e PROFESSIONISTA. Se avete altri ruoli da nascondere, aggiungeteli qui (fate sempre riferimento allo slug).

Avete soluzioni differenti? Commentate e discutiamone insieme!

1 commento su “WooCommerce: Assegnare specifico ruolo dopo registrazione”

Lascia un commento