WordPress pentru abonaţi: câmpuri de profil


Mergem mai departe cu tema configurării back-end-ului pentru abonaţi. Vă amintiţi că în articolele anterioare am scăpat de informaţiile irelevante. Sunt mulţi care consideră că WordPress a rămas undeva în trecut cu cerinţele la datele de profil: AIM??? Yahoo! Meesenger??? Jabber / Google Talk??? Astăzi sunt “identificatori” mai puţin relevanţi decât contul pe Facebook, Twitter sau LinkedIn. De aici captura de mai jos în care în stânga vedeţi cum stau nativ lucrurile în WordPress, iar în dreapta vedeţi cum le putem aranja diferit, adică mai la zi.

imagine

Codul pentru aceste modificări e banal şi presupune “dezactivarea” câmpurilor nedorite şi adăugarea unora noi. Important: nu e vorba de o chestie de cosmetică – pentru orice utilizatori nou, în tabela wp_usermeta nu vor mai apărea câmpurile aim, yim şi jabber ci facebook, twitter, linkedin. Dacă vă interesează doar să scoateţi, nu neapărat să puneţi ceva în loc, nu puneţi liniile 5-7.

function alteCampuriContact($contactmethods) {
	unset($contactmethods['aim']);
	unset($contactmethods['yim']);
	unset($contactmethods['jabber']);
	$contactmethods['facebook'] = 'Facebook';
	$contactmethods['twitter'] = 'Twitter';
	$contactmethods['linkedin'] = 'LinkedIn';
	return $contactmethods;
}
add_filter('user_contactmethods', 'alteCampuriContact');

Ei, ce simplu a fost! Dar să ştiţi că se poate şi mai complicat?… Dar de ce s-ar complica cineva? Metoda descrisă mai sus permite doar adăugarea de câmpuri text… dar poate dorim câmp textarea, select, checkbox sau cine ştie ce… Atunci ce facem? Păi după cum spuneam: varianta mai dificilă, dar care ne dă 100% control asupra informaţiilor adăugate în profil. Nu am să stau să explic codul următor pentru că o lectură atentă îl explică:

function alteCampuriProfil($user){?>
	<h3>Alte informaţii</h3>
	<table class="form-table">
		<tr>
			<th><label for="camp1">Ceva câmp</label></th>
			<td><input type="text" name="camp1" id="camp1"
				value="<?php echo esc_attr(get_the_author_meta('camp1',$user->ID)); ?>" 
				class="regular-text" />
			</td>
		</tr>
		<tr>
			<th><label for="camp2">Alt câmp</label></th>
			<td><select size=1 name="camp2" id="camp2">
				<option value="Valoare 1" <?php if(get_the_author_meta('camp2',$user->ID)=="Valoare 1") echo 'selected="selected"';?>>Optiunea 1</option>
				<option value="Valoare 2" <?php if(get_the_author_meta('camp2',$user->ID)=="Valoare 2") echo 'selected="selected"';?>>Optiunea 2</option>
				<option value="Valoare 3" <?php if(get_the_author_meta('camp2',$user->ID)=="Valoare 3") echo 'selected="selected"';?>>Optiunea 3</option>
			</select>
			</td>
		</tr>
	</table>
	<?php
}
add_action('show_user_profile', 'alteCampuriProfil');
add_action('edit_user_profile', 'alteCampuriProfil');
	
function salvareAlteCampuriProfil($user_id){
	if(!current_user_can( 'edit_user', $user_id )) return false;
	update_usermeta( $user_id, 'camp1', $_POST['camp1'] );
	update_usermeta( $user_id, 'camp2', $_POST['camp2'] );
}
add_action('personal_options_update', 'salvareAlteCampuriProfil');
add_action('edit_user_profile_update', 'salvareAlteCampuriProfil');

Cât despre rezultatul vizual, îl vedeţi mai jos. La codul de mai sus puteţi modifica pentru a adăuga ce fel de câmpuri doriţi… câte doriţi… Yep, libertate maximă astfel…

imagine

PS: Unul dintre lucrurile care mă frustrează e că nu am găsit o metodă elegantă (nu complicată) pentru eliminarea informaţiilor biografice.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (Neevaluat încă)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *