Inserimento tabella
-
Salve , sono nuovo del mondo wordpress .Vorrei aggiungere due campi al form di registrazione e prendendo spunto da un articolo ho modificato e creato un plugin add_campi_registrazione ,per ora non faccio altro che creare la tabella :
Ma la tabella non viene creata
- Questo topic è stato modificato 8 anni, 3 mesi fa da Cristiano Zanca.
-
Ciao @pippuccio76
un dev ti potrà dare sicuramente una risposta utile, nel frattempo però controlla l’apostrofo messo nel commento all’attivazione del plugin
//chiama la funzione all’attivazione del plugin
register_activation_hook(__FILE__,’create_plugin_table’);perchè potrebbe aver creato un conflitto
Ciao @pippuccio76,
Il miglior modo per aggiungere campi addizionali alla registrazione è seguire questa documentazione Customizing the Registration Form.
Anzichè creare tabelle aggiuntive puoi avvalerti di features già native di wordpress i cosiddetti user meta.
In tale modo ti potrai avvalorare di tutte le funzionalità che WordPress mette a disposizione per la gestione di tali dati.
Riguardo al problema della tabella che non viene creata, credo che il problema sia sul tipo di valore che stai assegnando al campo id essendo che lo stai anche segnando come campo di tipo UNIQUE, il valore è troppo grande per un campo UNIQUE. Prova invece ad assegnare
PRIMARY KEY (id)
e rimuovere la unique, una chiave primaria è unica di per se.Salve seguendo la guida e un esempio su internet ho paovato allora a modificarlo :
Inserendo un cf sbagliato quando premo su registra ho,giustamente, l’errore :
ERRORE: I dati inseriti nel campo "Partita Iva/Codice fiscale" non sono validi
In realtà il nuovo utente è creato e i dati inseriti nella tabella user_meta, perchè?
- Questa risposta è stata modificata 8 anni, 3 mesi fa da pippuccio76.
- Questa risposta è stata modificata 8 anni, 3 mesi fa da Cristiano Zanca.
Ciao @pippuccio76 ,
per dare una maggiore leggibilità alla discussione è meglio usare dei servizi come codepad.
Grazie 🙂
Ciao @pippuccio76,
Scusa per il ritardo nel risponderti, credo che il problema sia nella funzione salva_dati, i dati salvati nel db ti risultano errati per caso?
Da quello che vedo tu effettui la verifica sulla validità dei dati solo per quando si tratta di mostrare gli errori e non quando si tratta di effettuare l’update dei meta utente.
Inanzitutto ti ringrazio per la risposta . Giustamente come dicevi tu i dati devono essere validi anche prima di fare l’update . HO così modificato la funzione salva dati così :
// Salva i dati del form di registrazione function salva_dati($user_id) { if (! empty ( $_POST ['cf'] ) OR ! empty ( $_POST ['piva'] ) ) { if(! empty ( $_POST ['cf'] )){ if(isCodiceFiscale ( $_POST ['cf'] )){ update_usermeta ( $user_id, 'c_f', trim ( $_POST ['cf'] ) ); } } if(! empty ( $_POST ['piva'] )){ if(is_partitaiva ( $_POST ['piva_cf'] )){ update_usermeta( $user_id, 'p_iva', trim ( $_POST ['piva'] ) ); } } } }
Così non viene salvato nessun dato nella tabella user_meta , ma l’utente viene creato lo stesso , come posso evitare di creare anche l’utente se non ho i campi corretti ?
Se vuoi evitare di creare l’utente devi agganciarti a qualche altra hook, perchè user_register viene effettuata alla fine, dopo che l’utente si è registrato e sono state effettuate le operazioni di update dei meta.
Prova ad agganciarti a pre_user_login, di seguito la porzione di codice interessata in cui puoi vedere che se $pre_user_login è un valore non positivo, viene ritornato un WP_Error. In questo modo puoi fare i tuoi controlli e ritornare come valore della callback agganciata a pre_user_login una stringa vuota. Verrà così validata come vuota e la funzione non creerà l’utente. Se invece i tuoi controlli sui metadati andassero a buon fine ti basterà ritornare lo stesso valore che viene passato alla callback $sanitized_user_login.
/** * Filters a username after it has been sanitized. * * This filter is called before the user is created or updated. * * @since 2.0.3 * * @param string $sanitized_user_login Username after it has been sanitized. */ $pre_user_login = apply_filters( 'pre_user_login', $sanitized_user_login ); //Remove any non-printable chars from the login string to see if we have ended up with an empty username $user_login = trim( $pre_user_login ); // user_login must be between 0 and 60 characters. if ( empty( $user_login ) ) { return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') ); } elseif ( mb_strlen( $user_login ) > 60 ) { return new WP_Error( 'user_login_too_long', __( 'Username may not be longer than 60 characters.' ) ); }
Riguardo invece all’update dei meta dell’utente, sposta tutto in questo filtro insert_user_meta così tieni separate le due cose. La callback dovrebbe ritornare un array associativo con meta_key => meta_value.
Quindi Per intenderci:
function my_test_user_meta( $sanitized_user_login ) { // Faccio i test sui valori in $_POST // Se tutto ok ritorno $sanitized_user_login senza modifiche // Altrimenti ritorno stringa vuota '' } add_filter( 'pre_user_login', 'test_user_meta' ); function my_add_extra_user_meta( $meta, $user, $update ) { // Non faccio nulla se la funzione è richiamata durante // l'update di un utente. if ( $update ) { return $meta; } // Inserisco nell'array $meta i miei nuovi valori se esistono. // E se sono valori validi vedi https://codex.wordpress.org/Data_Validation per maggiori info. return $meta; } add_filter( 'insert_user_meta', 'my_add_extra_user_meta', 10, 3 );
Se vuoi puoi dare uno sguardo al file /wp-includes/user.php riga 1387 ( più o meno ) la funzione è wp_insert_user. Trovi tutto al suo interno e vedrai come vengono manipolati i dati.
- Questa risposta è stata modificata 8 anni, 3 mesi fa da Guido Scialfa. Motivo: tag code
- Questa risposta è stata modificata 8 anni, 3 mesi fa da Guido Scialfa. Motivo: more info
- Il topic ‘Inserimento tabella’ è chiuso a nuove risposte.