Når brugere skal registrere sig på en standard WordPress-side, bliver de bedt om et brugernavn og en e-mail-adresse. Flere oplysninger behøves der heller ikke i de flestes tilfælde, men hvad nu hvis man ønsker, at for- og efternavn skal være obligatorisk? Eller et af de ekstra felter, som man har oprettet til brugeres profil – f.eks. telefonnummer? I denne artikel forklarer jeg, hvordan man nemt kan tilføje flere felter til registreringsformularen.

Der kan være flere grunde til, at man ønsker en længere registreringsformular, og måske har man også lavet sin egen med en sideskabelon. Men de besøgende vil stadig kunne registrere sig på /wp-login.php (såfremt registrering er slået til), hvorfor den metode ikke er robust.

Jeg har løsningen, og den er inddelt i tre hooks med tilhørende funktioner, der alle som sædvanligt skal indsættes i temafunktioner eller et plugin.

Vis de ekstra felter i formularen

Først skal vi vise felterne i frontend. Denne del tager sig udelukkende af det visuelle. De ekstra felter, som man selv har oprettet til brugerens profil, kan også benyttes. Læs her hvordan man får en udvidet profil med flere felter.

function show_extra_fields(){
?>
	<p>
		<label>Fornavn<br />
		<input type="text" name="first_name" id="first_name" class="input" value="<?php echo isset($_POST['first_name']) ? esc_attr($_POST['first_name']) : ''; ?>" size="20" tabindex="30" /></label>
	</p>
	<p>
		<label>Efternavn<br />
		<input type="text" name="last_name" id="last_name" class="input" value="<?php echo isset($_POST['last_name']) ? esc_attr($_POST['last_name']) : ''; ?>" size="20" tabindex="40" /></label>
	</p>
	<p>
		<label>Telefonnummer<br />
		<input type="text" name="user_phone" id="user_phone" class="input" value="<?php echo isset($_POST['user_phone']) ? esc_attr($_POST['user_phone']) : ''; ?>" size="20" tabindex="50" /></label>
	</p>
<?php
}
add_action('register_form','show_extra_fields');

Her vises felter for hhv. fornavn, efternavn og det tilføjede profilfelt telefonnummer.

Valider ekstra felter ved registrering

Det er altid vigtigt, at man validerer data, så man ved, at der ikke tilføjes noget uønsket i databasen. Og så skal de ekstra felter først og fremmest også lige gøres påkrævet at udfylde.

function check_extra_fields($login, $email, $errors) {
	if(!$_POST['first_name'] || $_POST['first_name'] != ltrim($_POST['first_name']))
		$errors->add('empty_first_name', "<strong>FEJL</strong>: Indtast fornavn");
	if(!$_POST['last_name'] || $_POST['first_name'] != ltrim($_POST['first_name']))
		$errors->add('empty_last_name', "<strong>FEJL</strong>: Indtast efternavn");
	if(!$_POST['user_phone'] || !is_numeric($_POST['user_phone']))
		$errors->add('empty_user_phone', '<strong>FEJL</strong>: Indtast gyldigt telefonnummer');
}
add_action('register_post','check_extra_fields',10,3);

Her har jeg valgt at tjekke, om der overhovedet er indtastet noget i de ekstra felter. Ved for- og efternavn kan man ligeledes heller ikke nøjes med blot at indtaste et mellemrum, mens telefonnummeret kun må være numerisk.

Og læg mærke til, at man også har mulighed for at benytte parametrene for brugernavn og email-adresse, hvilket betyder, at man eventuelt kan tilføje ekstra validering for disse også.

Indsæt de ekstra felter i databasen

Hvis det indtastede er gyldigt, skal det jo til sidst lægges ind i databasen på den rette plads. Da de ekstra felter, som man selv opretter til profiler, er såkaldte meta-nøgler, kan deres værdier håndteres på samme måde som alle andre meta-værdier.

function register_extra_fields($user_id)  {
	wp_update_user(array(
		'ID'			=> $user_id,
		'first_name'	=> esc_attr($_POST['first_name']),
		'last_name'		=> esc_attr($_POST['last_name']),
		'user_phone'	=> $_POST['user_phone']
	));
}
add_action('user_register','register_extra_fields');

Grunden til, at vi benytter wp_update_user() og ikke wp_insert_user(), er at den nye bruger sådan set allerede er oprettet i databasen på dette tidspunkt, og at vi derfor blot opdaterer den med de nye værdier.

Så er vi færdige. Hvis du besøger din registreringsside nu, så vil de nye ekstra felter være der sammen med al funktionalitet! Med en smule CSS kan du endvidere også få designet på /wp-login.php til at passe sammen med resten af din WordPress-side.

Del:

Kommentér

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *