Не удается программно создавать пользователей в среде WordPress

#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) и всегда возвращаетесь «да, этот пользователь не существует».