Search code examples
phpwordpressuser-roles

WP User role stays empty when making a new user with extern form


I am trying to make new Wordpress users using an extern form in a php-file. Leerling is dutch for student, and leerling is a role I created using a User Role Plugin. All the users that the form makes need to have the role leerling.

I'm using the following code to try to do that:

        <?php
        // Maakt een connectie met de database

        $con = mysqli_connect("localhost", "root", "", "scoreplugin_db");

        if (!$con) {
            die("Connection failed: " . mysqli_connect_error());
        }

        // Haalt gegevens uit het registratieformulier, en genereert overige gegevens

        if (isset($_POST['btn-signup'])) {
            $uname = mysqli_real_escape_string($con, $_POST['uname']);
            $achternaam = mysqli_real_escape_string($con, $_POST['achternaam']);
            $upass = wp_hash_password(mysqli_real_escape_string($con, $_POST['pass']));
            $datum = mysqli_real_escape_string($con, $_POST['datum']);
            $email = mysqli_real_escape_string($con, $_POST['email']);
            $basisschool = mysqli_real_escape_string($con, $_POST['basisschool']);
            $opleidingsduur = mysqli_real_escape_string($con, $_POST['opleidingsduur']);
            $bsgroep = mysqli_real_escape_string($con, $_POST['bsgroep']);
            $url = '#leerling';
            $fullname = $uname . ' ' . $achternaam;


            // Query's om alle user data in de database op te slaan

            $userdata = "INSERT INTO wp_users (user_login,user_pass,user_nicename,user_email,user_url,user_registered,display_name) VALUES('$email','$upass','$uname','$email','$url','now()','$fullname')";

            $userinfo = "INSERT INTO wp_users_info (user_voornaam,user_achternaam,user_geboortedatum,user_basisschool,user_opleidingsduur,user_groep) VALUES('$uname','$achternaam','$datum','$basisschool','$opleidingsduur','$bsgroep')";

            // Voert bovenstaande query's uit

            if (!mysqli_query($con, $userdata)) {
                die('Error: ' . mysqli_error($con));
            }
            if (!mysqli_query($con, $userinfo)) {
                die('Error: ' . mysqli_error($con));
            }

            // User ID ophalen om meta op te slaan
            $newuserid = mysqli_insert_id($con);

            echo "$newuserid";

            // De rank die de gebruiker automatisch meekrijgt
            $rank = 'a:1:{s:8:"leerling";b:1;}';


            // Query's om usermeta op te slaan
            $addusernickname = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','nickname','$uname')";

            $adduserfirstname = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','first_name','$uname')";

            $adduserlastname = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','last_name','$achternaam')";

            $adduserrank = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','wp_capabilities', '$rank')";

            $adduserlevel = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','wp_user_level', '0')";

            $adminbar = "INSERT INTO wp_usermeta (user_id,meta_key,meta_value) VALUES ('$newuserid','show_admin_bar_front', 'false')";

            // Voert de metaquery's uit
            if (!mysqli_query($con, $addusernickname)) {
                die('Error: ' . mysqli_error($con));
            }

            if (!mysqli_query($con, $adduserfirstname)) {
                die('Error: ' . mysqli_error($con));
            }

            if (!mysqli_query($con, $adduserlastname)) {
                die('Error: ' . mysqli_error($con));
            }

            if (!mysqli_query($con, $adduserrank)) {
                die('Error: ' . mysqli_error($con));
            }

             if (!mysqli_query($con, $adduserlevel)) {
                die('Error: ' . mysqli_error($con));
            }

             if (!mysqli_query($con, $adminbar)) {
                die('Error: ' . mysqli_error($con));
            }
        }
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>Schools in Music - nieuw account</title>
                <link rel="stylesheet" href="style.css" type="text/css" />
            </head>
            <body style="background-repeat: no-repeat;" background="http://test.schoolsinmusic.nl/wp-content/themes/schoolsinmusic/img/bglogin.png">
                <center>
                    <div id="login-form">
                        <form method="post">
                            <table align="center" width="30%" border="0">
                                <tr>
                                    <td><input class="registrationinput" type="text" name="uname" pattern="^[a-zA-Z ]+$" placeholder="Vul hier je voornaam in" required /></td>
                                </tr>
                                <tr>
                                    <td><input class="registrationinput" type="text" name="achternaam" pattern="^[a-zA-Z ]+$" placeholder="Vul hier je achternaam in" required /></td>
                                </tr>
                                <tr>
                                    <td><input class="registrationinput" type="date" min='1900-01-01' max='2017-01-01' id="datepicker" name="datum" placeholder="Wanneer ben je geboren?" required /></td>
                                </tr>
                                <tr>
                                    <td><input class="registrationinput" type="email" name="email" placeholder="Vul hier je emailadres in" required /></td>
                                </tr>
                                <tr>
                                    <td><input class="registrationinput" type="password" name="pass" placeholder="Vul hier je wachtwoord in" required /></td>
                                </tr>
                                <tr>
                                    <td><input class="registrationinput" type="text" name="basisschool" placeholder="Op welke basisschool zit je?" required /></td>
                                </tr>
                                <tr>
                                    <div id="selectoptions">
                                        <td style="font-family: PoetsenOne-Regular; float: right;">Hoe lang speel je al muziek? <select style="font-family: PoetsenOne-Regular;" name="opleidingsduur"> required />
                                                <option value="-1">Minder dan 1 jaar</option>
                                                <option value="1">1 jaar</option>
                                                <option value="2">2 jaar</option>
                                                <option value="3">3 jaar</option>
                                                <option value="4">4 jaar</option>
                                        </td>
                                </tr>
                                <tr>
                                    <td style="font-family: PoetsenOne-Regular; float: right;">In welke groep zit je? <select style="font-family: PoetsenOne-Regular;" name="bsgroep"> required />
                                            <option value="1">Groep 1</option>
                                            <option value="2">Groep 2</option>
                                            <option value="3">Groep 3</option>
                                            <option value="4">Groep 4</option>
                                            <option value="5">Groep 5</option>
                                            <option value="6">Groep 6</option>
                                            <option value="7">Groep 7</option>
                                            <option value="8">Groep 8</option>
                                    </td>
                                    </div>

                                </tr>
                                <tr>
                                    <td><button class="login-button" style="font-family: PoetsenOne-Regular;" type="submit" name="btn-signup" >Registreren</button></td>
                                </tr>

                            </table>
                        </form>
                    </div>
                </center>
            </body>
        </html>

The information is written into the Database. But in the admin, the user role stays empty. (When I log into wp-admin as an admin, and view the Users-page, the new users have no role).

Can anybody tell me what I am doing wrong?

Jeffrey


Solution

  • You could use the Wordpress API to create the user.. See Wordpress User create API, covers roles too https://developer.wordpress.org/rest-api/reference/users/#create-a-user