#php #mysql #wordpress
#php #mysql #wordpress
Вопрос:
Я новичок в WordPress и с нетерпением жду возможности добавлять пользователей через страницу регистрации во внешнем интерфейсе, сейчас я действительно в замешательстве, потому что я не могу заставить этот код работать, он просто не создаст пользователя.
Вот код:
<?php
/*
Template Name: Register
*/
get_header(); ?>
<?php
if(isset($_POST['submit'])){
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if($email1 == $email2){
if($pass1 == $pass2)
{
if( null == username_exists( $email_address ) ) {
$user_login = $_POST['uname'];
$user_email = $_POST['email1'];
$user_pass = $_POST['pass1'];
$user_id = wp_create_user( $user_login, $user_pass, $user_email );
wp_update_user(
array(
'ID' => $user_id,
'nickname' => $email_address
)
);
$user = new WP_User( $user_id );
$user->set_role( 'contributor' );
}
}else{
echo "Sorry, your passwords do not match <br/>";
}
}else{
echo "Sorry your Emails dont match <br/>";
exit();
}
}else{
$form = <<<EOT
<form action="" method="POST">
First Name: <input type="text" name="name"/> <br/>
Last Name: <input type="text" name="lname"/> <br/>
Username: <input type="text" name="uname"/> <br/>
Email: <input type="text" nam="email1"/> <br/>
Confim Email: <input type="text" name="email2"/> <br/>
Password: <input type="password" name="pass1"/> <br/>
Confirm Password: <input type="password" name="pass2"/> <br/>
<input type="submit" value="Register" name="submit"/>
</form>
EOT;
echo $form;
}
?>
<?php get_footer(); ?>
Спасибо.
Не уверен, важно это или нет, но я выбрал wpwpp_ в качестве префикса
Ответ №1:
проверьте свою функцию, если( null == username_exists( $email_address ) ) //$email_address должен быть либо $email1, либо $email2
Но я бы рекомендовал вместо этого wp_insert_user, а не wp_create_user ..
<?php
/*
Template Name: Register
*/
get_header(); ?>
<?php
if(isset($_POST['submit'])){
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if($email1 == $email2){
if($pass1 == $pass2)
{
if( null == username_exists( $email1) ) {
$user_login = $_POST['uname'];
$user_email = $_POST['email1'];
$user_pass = $_POST['pass1'];
$userdata = array(
'user_login' => $user_login ,
'user_pass'=> $user_pass,
'user_email'=>$user_email
);
$user_id = wp_insert_user( $userdata ) ;
wp_update_user(
array(
'ID' => $user_id,
'nickname' => $email_address
)
);
$user = new WP_User( $user_id );
$user->set_role( 'contributor' );
}
}else{
echo "Sorry, your passwords do not match <br/>";
}
}else{
echo "Sorry your Emails dont match <br/>";
exit();
}
}else{
$form = <<<EOT
<form action="" method="POST">
First Name: <input type="text" name="name"/> <br/>
Last Name: <input type="text" name="lname"/> <br/>
Username: <input type="text" name="uname"/> <br/>
Email: <input type="text" nam="email1"/> <br/>
Confim Email: <input type="text" name="email2"/> <br/>
Password: <input type="password" name="pass1"/> <br/>
Confirm Password: <input type="password" name="pass2"/> <br/>
<input type="submit" value="Register" name="submit"/>
</form>
EOT;
echo $form;
}
?>
<?php get_footer(); ?>
Это может сработать для вас!! Удачи
Комментарии:
1. Он по-прежнему не будет работать и продолжает отправлять меня на «Страница не найдена», только когда я нажимаю «Отправить» без полей, когда он отправляет меня на то, что я ввел в действие =»»
2. я предполагаю, что вы хотите перенаправить пользователя на свою домашнюю страницу после регистрации.. таким образом, вы можете использовать wp_redirect() после закрытия ….. else{ echo «извините, ваши электронные письма не совпадают …»; exit();} wp_redirect(‘your_site_url’); } ……..
Ответ №2:
Вы никогда не определяете $email_address
:
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
Поэтому, когда вы делаете это:
if( null == username_exists( $email_address ) ) {
вы, по сути, делаете username_exists(null)
и всегда возвращаетесь «да, этот пользователь не существует».