Rekisteröityminen ja käyttäjän lisätiedot

Gravity Forms -lisäosaa voi käyttää moneen muuhunkin kuin pelkästään palautelomakkeen tekemiseen. Tämän artikkelin tarkoituksena on kuvata miten Gravity Formsin avulla voi tehdä rekisteröitymislomakkeen, jossa kysytään käyttäjätunnuksen, salasanan ja emailin lisäksi osoitetietoja. Nämä tiedot (tai mitä lisätietoja milloinkin tarvitsee) lisätään käyttäjän profiilitietoihin ja käyttäjä tai admin voi päivittää osoitetietoja muiden käyttäjätietojen tavoin.

Artikkelissa demotaan myös miten pienoinen nettikauppa perustetaan GF:n avulla. Tilausta tehdessä toimitusosoite on valmiiksi esitäytettynä sisäänkirjautuneille käyttäjille käyttämällä profiilisivun osoitetietoja. Tarvitset kaksi lisäosaa, jotta rekisteröityminen ja nettikaupan perustaminen onnistuu.

  1. Gravity Forms
  2. Gravity Forms User Registration Add-On. Tämä on lisäosan lisäosa eli ns. Add-On Gravity Formsiin.

Rekisteröitymislomakkeen tekeminen

Ensin pitää tehdä lomake rekisteröitymiseen ja liittää se User Registration Add-On:iin. Lomakkeen lisääminen tehdään kohdasta Forms >> New Form. Lomakkeeseen on syytä lisätä Advanced Field -kohdasta kentät nimi (Name), Osoite (Address), sähköposti (Email) ja salasana (Password). Standard Field -kohdasta lisätään käyttäjätunnukselle Single Line Text -kenttä.

Lomake näyttää hallinnan puolella tältä.

Ja käyttäjälle, joka haluaa rekisteröityä nettikauppaan tältä.

Ennen kuin rekisteröitymislomake toimii, niin lomake pitää liittää User Registration Add-On:iin. Tämä tehdään kohdasta Forms >> User Registration. Valitse sieltä tekemäsi rekisteröitymislomake ja yhdistä oikeat kentät kuvan osoittamalla tavalla. Huom! Tässä vaiheessa on tärkeää lisätä uusia User Meta tietoja, tässä tapauksessa osoitetietoja. Olen nimennyt User Meta tiedot seuraavasti: osoite, postinumero ja postitoimipaikka. Näitä nimiä käytetään myöhemmin ja näillä nimillä osoitetiedot tallentuvat WP:n prefix_usermeta tietokantataulukkoon.

Tämän jälkeen käyttäjä pystyy rekisteröitymään millä tahansa sivulla, minne kyseinen lomake laitetaan näkyviin ja käyttäjän profiiliin tallentuu myös osoitetiedot.

Nettikauppalomakkeen tekeminen ja esitäytetyt osoitetiedot

Esimerkkinettikaupassa myydään pyöriä (500e) ja trikoita (100e). Lomakkeen tekeminen on helppoa. Uusi lomake tehdään kohdasta Forms >> New Form ja Pricing Fields kentästä valitaan kaksi Product-kenttää. Näiden tuotekenttien muokkaustilassa pystyt antamaan tuotteille hinnat ja muut lisätiedot. Pricing Fields -kentästä voi valita myös Total-kentän, joka laskee myös käyttäjälle tuotteiden yhteishinnan. Advanced Fields -kentästä valitaan nimi-, email- ja osoitekentät, joihin voidaan hakea esitäytetyt tiedot käyttäjän profiilitiedoista. Lomake lisätään halutulle sivulle ja lopputulos näyttää tältä.

Esitäytetyt tiedot näkyvät vain sisäänkirjautuneille käyttäjille eivätkä osoitetiedot tule automaattisesti tilauslomakkeeseen, vaan teeman (mielellään lapsiteeman) functions.php-tiedostoon pitää lisätä seuraavat filtterit ja funktiot.


	// populate the field with "user_firstname" as the population parameter with the "first_name" of the current user
	add_filter('gform_field_value_user_firstname', create_function("", '$value = populate_usermeta(\'first_name\'); return $value;' ));

	// populate the field with "user_lastname" as the population parameter with the "last_name" of the current user
	add_filter('gform_field_value_user_lastname', create_function("", '$value = populate_usermeta(\'last_name\'); return $value;' ));
	
	/* populate the field with "email" */
	add_filter('gform_field_value_email', create_function("", '$value = populate_usermeta(\'user_email\'); return $value;' ));
	
	/* populate the field with "osoite" */
	add_filter('gform_field_value_osoite', create_function("", '$value = populate_usermeta(\'osoite\'); return $value;' ));
	
	/* populate the field with "postinumero" */
	add_filter('gform_field_value_postinumero', create_function("", '$value = populate_usermeta(\'postinumero\'); return $value;' ));
	
	/* populate the field with "postitoimipaikka" */
	add_filter('gform_field_value_postitoimipaikka', create_function("", '$value = populate_usermeta(\'postitoimipaikka\'); return $value;' )

// this function is called by both filters and returns the requested user meta of the current user
function populate_usermeta( $meta_key ){
    global $current_user;
    return $current_user->__get( $meta_key );
}

Jokainen Gravity Formsin filtteri kutsuu samaa funktiota populate_usermeta(), joka hakee profiilitiedoista etunimen, sukunimen, emailin, osoitteen, postinumeron ja postitoimipaikan. Huom! populate_usermeta() arvot osoite, postinumero ja postitoimipaikka ovat täsmälleen samoja nimeltään kuin User Meta tietoihin laitettiin. Näillä nimillä osoitetiedot ovat tallentuneet prefix_usermeta tietokantataulukkoon.

Tämän jälkeen nämä samat nimet tulee laittaa nettikauppalomakkeen tietoihin Advanced-välilehdellä. Klikkaa ensin Allow field to be populated dynamically ja voit täyttää tiedot kuvan osoittamalla tavalla.

Vastaavasti nettikauppalomakkeen nimi -ja emailkenttiin tulee laittaa niitä vastaavat arvot mitä gform_field_value_ filtterissä määritettiin.

Esim. gform_field_value_user_lastname tarkoittaa sitä, että parametriksi kirjoitetaan user_lastname.

Field Parameter Names Advanced-välilehdellä.

Osoitetietojen päivittäminen profiilisivulla

Jos käyttäjälle halutaan antaa mahdollisuus jälkikäteen muuttaa osoitetietojaan, niin teeman functions.php-tiedostoon pitää lisätä käyttäjäprofiilin muokkaukseen liittyvää koodia. Ensiksi osoitetiedot on saatava näkyviin profiilisivulle. Tämä tapahtuu käyttämällä show_user_profile ja edit_user_profile koukkuja ja lisäämällä html-lomake osoitekentille. Koodi on sen verran pitkä, eikä WordPress tykkää php ja html tageistä, niin laitan koodin katsottavaksi tänne.

Lue tarkemmat ohjeet koodin käytöstä Justin Tadlockin sivuilta: Adding and using custom user profile fields.

Jotta osoitetietoja pystyisi päivittämään, niin yllä olevasta artikkelista löytyy siihenkin ratkaisu. Päivittäminen tapahtaa personal_options_update ja edit_user_profile_update koukkujen avulla seuraavasti.


	/* Tallenna osoitetiedot */
	add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
	add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

/* Tallenna osoitetiedot */
function my_save_extra_profile_fields( $user_id ) {

	if ( !current_user_can( 'edit_user', $user_id ) )
		return false;
	
	/* Tarkistetaan, että postinumerossa on 5 numeron jono. Osoitteesta sekä postitoimipaikasta poistetaan kaikki turha pois. */

	/* Tallennetaan (päivitetään) osoitetiedot */
	update_user_meta( $user_id, 'osoite', sanitize_text_field( $_POST['osoite'] ) );
	if( preg_match( '/^[0-9]{5}$/', $_POST['postinumero'] ) ) update_user_meta( $user_id, 'postinumero', $_POST['postinumero'] );
	update_user_meta( $user_id, 'postitoimipaikka', sanitize_text_field( $_POST['postitoimipaikka'] ) );
}

sanitize_text_field()-funktiolla poistetaan mm. html-tagit ja tyhjät välilyönnit osoite -ja postitoimikentistä. Vastaavasti postinumerokenttään ei hyväksytä kuin viiden numeron jono kättämällä preg_match()-funktiota.

Yhteenveto

Demoa voi soveltaa laajempiinkin tilanteisiin ja seuraava askel olisi asentaa käyttäjähallintaan oma lisäosansa. Tähän tarkoitukseen käy erinomaisesti Members -lisäosa, jolla voi hallita käyttäjäryhmiä (roles) ja niiden oikeuksia (capabilities). Sillä voi myös hallita sitä, että vain sisäänkirjauneet käyttäjät voivat käyttää nettikauppalomaketta.

Edit: Gravity Formsin versioon 1.6 on lisätty toiminto Require user to be logged in, joten lomake saadaan tarvittaessa näkyviin vain sisäänkirjautuneille käyttäjille. Monimuotoisemmat käyttäjäryhmäoikeudet kannattaa tehdä Members-lisäosalla.

Mihin käyttötarkoituksiin olet itse käyttänyt Gravity Forms -lisäosaa? Kaikki hyvät ja huonotkin ideat otetaan vastaan.

Lähteet

Lisää lukemista

WordCamp Finland 2016

WordCamp Finland 2016

Tervetuloa WordCamp Finland 2016 -tapahtumaan! WordPress-aiheinen seminaari järjestetään 15.-16.4.2016 Helsingissä. Perjantaina 15.4. on tarjolla erilaisia…