Cum să adaugi un user nou în WordPress din cod?

Zilele acestea am lucrat la un site (WP în cazul ăsta nu a fost folosit ca blog ci ca un CMS, deci e site, nu? :D ) și am fost pus în situația următoare: clientul vroia ca userii să-și facă un cont rapid, fără a intra în pagina de admin sau a aștepta confirmări pe email.

Prima idee a fost să caut un plugin care face asta. Dar apoi mi-am dat seama că trebuie să existe și o alte modalități în afara unui plugin sau sql băgat cu tupeu cu $wpdb->query. Prin urmare, am mai căutat puțin și am descoperit wp_create_user().

Toată povestea asta creează un utilizator nou și îl și autentifică. Am folosit json_encode deoarece fac toată treaba asta via AJAX și reîncarc pagina doar dacă userul s-a adăugat cu succes.

Codul arată așa:


$user_pass		=		htmlspecialchars($_POST['pwd'], ENT_QUOTES);
$user_pass2		=		htmlspecialchars($_POST['pwd2'], ENT_QUOTES);
$user_email		=		htmlspecialchars($_POST['mail'], ENT_QUOTES);

require(ABSPATH.'wp-blog-header.php');
//require_once( ABSPATH . WPINC . '/registration.php');
if('POST' != $_SERVER['REQUEST_METHOD']) die('not post');
if($user_pass != $user_pass2) {
	$ret = array(
		"status"	=>	0,
		"error"		=>	"Passwords doesn't match"
	);
}
$user_login = sanitize_user($_POST['user']); // goo.gl/3EDuL
$redirect_to = home_url('/');

if(username_exists($user_login) || // goo.gl/cWzVk
 	!validate_username($user_login) || // goo.gl/JCEXT
 	!is_email($user_email) || // goo.gl/gAfPR
 	email_exists($user_email)) { // goo.gl/1zNje
 		$ret = array(
			"status"	=>	0,
			"error"		=>	"invalid something"
		);
		die(json_encode($ret)); // todo: make errors more explicit
	}

// goo.gl/mDSgP
$user_id = wp_create_user( $user_login, $user_pass, $user_email );

if ( !$user_id ) { die('bad user_id'); }

// goo.gl/kTX4S
wp_new_user_notification($user_id, $user_pass);

$credentials = array(
	'remember'			=>	true,
	'user_login'		=>	$user_login,
	'user_password'	=>	$user_pass
);
// goo.gl/ifYLB
do_action_ref_array('wp_authenticate', array(
	&$credentials['user_login'], 
	&$credentials['user_password'])
);

$user = wp_authenticate($credentials['user_login'], $credentials['user_password']); // goo.gl/X8MUM
wp_set_auth_cookie($user_id, $credentials['remember']); // goo.gl/13rYA
do_action('wp_login', $credentials['user_login']);

$ret = array(
	"status"	=>	1,
	"redirect"	=> $redirect_to
);

echo json_encode($ret);

Ce a fost de comentat am comentat. Pentru funcția wp_authenticate nu există o pagină în Codex, așa că am dat link direct în sursă.

Încă lucrez la acest site (este în beta) deci probabil se va schimba câte ceva la cod (erori ceva mai explicite atunci când există un user cu același nume, chestii de genul). Dacă este cazul, voi actualiza articolul.

6 Comentarii to “Cum să adaugi un user nou în WordPress din cod?”

  1. Shweet. Am zis ca iau si eu o data documentatia aia la mana sa vad ce-i pe acolo, ca de cate ori mai caut cate ceva raman profund impresionat. :)

  2. Tare ideea sa comentezi direct cu linkuri

  3. Staicu Ionuț-Bogdan

    @Cipy: știu, am doar idei tari :D

    @Mihai: dacă faci asta o iei din loc. Cel mai bine e să cauți ceva când ai nevoie. :)

  4. Salut,

    Pentru ce versiune de WP e scris codul tau ?
    Intreb pentru ca vad in ‘registration.php’ ca e deprecated din 3.1 :

    _deprecated_file( basename(__FILE__), '3.1', null, __( 'This file no longer needs to be included.' ) );
  5. Staicu Ionuț-Bogdan

    Brayn, codul l-am scris și testat pe 3.0.3 sau 3.0.4. Am făcut update ulterior.

    Oricum, habar n-aveam că e deprecated. Mulțumesc. Am comentat și codul de mai sus.

  6. Da, oricum nu conta cu adevarat, codul mergand ok si pe 3.1

    Merci pentru informatii, partea de creeare user a fost exact ce aveam nevoie!

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter