• Super User

    [Contact Form 7] Funzione personalizzata: ho un problema.

    Ciao a tutti,
    ho creato un step personalizzato per nuovi utenti del mio sito tramite delle funzioni custom e l'utilizzo del plugin Contact Form 7.

    1. Quando l'amministratore aggiungere un nuovo account, il sistema crea due user_meta personalizzati:
    function function_new_user($user_id) { 
       add_user_meta( $user_id, '_new_user', '1' );
       add_user_meta( $user_id, '_user_accept_privacy', '1' );
    }
    add_action( 'user_register', 'function_new_user');
    
    
    1. quando l'utente accede per prima volta, viene eseguito un reindirizzamento ad una pagina personalizzata: in questa pagina vi è un modulo con una casella di controllo che l'utente deve selezionare per andare avanti.
    function function_check_login_redirect($user_login, $user) {
       
       $logincontrol = get_user_meta($user->ID, '_new_user', 'TRUE');
       $acceptPrivacyControl = get_user_meta($user->ID, '_user_accept_privacy', 'TRUE');
       
       //Se entrambi sono TRUE eseguo il redirect
       if ( $logincontrol and  acceptPrivacyControl) {
          wp_redirect( home_url( $path = '/trattamento-dei-dati-personali/' ), 302 ); exit;
       }
    }
    add_action('wp_login', 'function_check_login_redirect', 10, 2);
    
    
    1. nell'intestazione supplementare del form ho aggiunto:
    on_sent_ok: "location = 'http://www.myisite.it';"
    
    ```e il modulo invia all'amministrazione una e-mail per notificare che l'utente è connesso per la prima volta.
    
    
    4) Quando l'utente clicca sul pulsante, viene aggiornato il valore dei due user_meta:
    

    function wpcf7_redirect_on_submit($contact_form)
    {
    $user = wp_get_current_user();

    //print_r($contact_form);
    $id_contact_form = $contact_form->id;
    
    if($id_contact_form == 828)
    {	
    	//Imposto i due TAG a FALSE
    	update_user_meta( $user->ID, '_new_user', '0' );
    	update_user_meta( $user->ID, '_user_accept_privacy', '0' );
    }
    

    }

    add_action('wpcf7_mail_sent', 'wpcf7_redirect_on_submit');

    
    Funziona molto bene, ma ho un problema: anche se l'utente si sta loggando per la secondo volta e le successive, il modulo invia all'amministrazione una e-mail come se si trattasse del primo login.
    
    
    Dove potrebbe essere il problema secondo voi?
    
    
    Grazie.

  • Moderatore

    Se già funziona tutto bene, penso ti basti aggiungere qualche controllo.
    Del tipo:
    Se l'utente fa accesso e lo status di privacy non esiste fai redirect sulla pagina dedicata e invia la mail, altrimenti no ( semplice if ed else ).

    Poi non ho letto bene il codice che oggi ho pochissimo tempo a disposizione. Piu tardi ci do un occhio più approfondito


  • Super User

    Ciao Ultima,
    il controllo esiste già function_check_login_redirect, ma a quanto pare non va!

    Se puoi verificare più tardi, grazie.


  • Moderatore

    Se hai copiato il codice così com'è, ti ho trovato l'errore 🙂

    Non hai messo il simbolo '$' in acceptPrivacyControl


  • Super User

    Esatto, Stefano, il problema era proprio lì.

    Grazie.