I got the undefined variable : user_id when i use get_user_meta
$phone = get_user_meta( $user_id, 'phone_no', true );
$icno = get_user_meta( $user_id, 'ic_no', true );
when i try put the above code below this line
$user_id = wp_insert_user( $user_data );
no error occur but my value $phone and $icno become empty
This is my full code
<?php
/*
Template Name: Register
*/
get_header();
// Exit if accessed directly
if ( !defined('ABSPATH')) exit;
?>
<html>
<body id="login-page" <?php body_class(); ?>>
<div class="container">
<div class="row register-page-container p-3 p-lg-5 mt-5 d-flex justify-content-center w-75 mx-auto">
<?php
global $wpdb, $user_ID;
//Check whether the user is already logged in
if (!$user_ID) {
// Default page shows register form.
// To show Login form set query variable action=login
$action = (isset($_GET['action']) ) ? $_GET['action'] : 0;
// Login Page
if ($action === "login") { ?>
<?php
$login = (isset($_GET['login']) ) ? $_GET['login'] : 0;
if ( $login === "failed" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> Invalid username and/or password.</div>';
} elseif ( $login === "empty" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> Username and/or Password is empty.</div>';
} elseif ( $login === "false" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> You are logged out.</div>';
}
?>
<div class="col-md-5">
<?php
$args = array(
'redirect' => home_url().'/login/',
);
wp_login_form($args); ?>
<p class="text-center"><a class="mr-2" href="<?php echo wp_registration_url(); ?>">Register Now</a>
<span clas="mx-2">·</span><a class="ml-2" href="<?php echo wp_lostpassword_url( ); ?>" title="Lost Password">Lost Password?</a></p>
</div>
<?php
} else { // Register Page ?>
<?php if(get_option('users_can_register')) { ?>
<div class="col-md-5 manual-register-form">
<form action="" method="post">
<p>
<label for="user_login">Username</label>
<input type="text" name="username" placeholder="Type your Username Here" class="register-input mb-4" value="<?php if( ! empty($username) ) echo $username; ?>" /><br />
</p>
<p>
<label for="user_password">Password</label>
<input type="password" name="password" placeholder="Type your Password Here" class="register-input mb-4" value="<?php if( ! empty($password) ) echo $password; ?>" /><br />
</p>
<p>
<label for="user_email">Email</label>
<input type="text" name="email" placeholder="Type your Email Here" class="register-input mb-4" value="<?php if( ! empty($email) ) echo $email; ?>" /> <br />
</p>
<p>
<label for="phone_no">Phone</label>
<input type="text" name="phone_no" placeholder="Type your Phone Here" class="register-input mb-4" value="<?php if( ! empty($phone) ) echo $phone; ?>" /> <br />
</p>
<p>
<label for="ic_no">IC No</label>
<input type="text" name="ic_no" placeholder="Type your IC No Here" class="register-input mb-4" value="<?php if( ! empty($icno) ) echo $icno; ?>" /> <br />
</p>
<input type="submit" id="register-submit-btn" class="mb-4" name="submit" value="SignUp" />
</form>
<p>Already have an account? <a href="/login">Login Here</a></p>
</div>
<?php } else {
echo "Registration is currently disabled. Please try again later.";
}
} ?>
<?php
if ( $_POST ) {
$error = 0;
$username = esc_sql($_REQUEST['username']);
if ( empty($username) ) {
echo '<div class="col-12 register-error">User name should not be empty.</div>';
$error = 1;
}
$email = esc_sql($_REQUEST['email']);
if ( !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $email) ) {
echo '<div class="col-12 register-error">Please enter a valid email.</div>';
$error = 1;
}
$phone = esc_sql($_REQUEST['phone_no']);
if ( empty($phone) ) {
echo '<div class="col-12 register-error">Please enter a valid phone.</div>';
$error = 1;
}
$error = 0;
$icno = esc_sql($_REQUEST['ic_no']);
if ( empty($icno) ) {
echo '<div class="col-12 register-error">Please enter a valid IC No.</div>';
$error = 1;
}
if ( $error == 0 ) {
$password = esc_sql($_REQUEST['password']);
if ( empty($password) ) {
echo '<div class="col-12 register-error">Password should not be empty.</div>';
$error = 1;
}
$phone = get_user_meta( $user_id, 'phone_no', true );
$icno = get_user_meta( $user_id, 'ic_no', true );
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$icno = $_POST['ic_no'];
$phone = $_POST['phone_no'];
$user_data = [
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
];
$user_id = wp_insert_user( $user_data );
update_user_meta( $user_id, 'phone_no', $phone );
update_user_meta( $user_id, 'ic_no', $icno );
// // success
if ( ! is_wp_error( $user_id ) ) {
echo 'User created: '. $user_id;
}
else {
echo 'Registration error';
}
}
}
if ( $error != 2 ) { ?>
<?php }
} else { ?>
<p>You are logged in. Click <a href="<?php bloginfo('wpurl'); ?>">here to go home</a></p>
<?php } ?>
</div>
</div>
<?php get_footer();
?>
</body>
</html>
I got the undefined variable : user_id when i use get_user_meta
$phone = get_user_meta( $user_id, 'phone_no', true );
$icno = get_user_meta( $user_id, 'ic_no', true );
when i try put the above code below this line
$user_id = wp_insert_user( $user_data );
no error occur but my value $phone and $icno become empty
This is my full code
<?php
/*
Template Name: Register
*/
get_header();
// Exit if accessed directly
if ( !defined('ABSPATH')) exit;
?>
<html>
<body id="login-page" <?php body_class(); ?>>
<div class="container">
<div class="row register-page-container p-3 p-lg-5 mt-5 d-flex justify-content-center w-75 mx-auto">
<?php
global $wpdb, $user_ID;
//Check whether the user is already logged in
if (!$user_ID) {
// Default page shows register form.
// To show Login form set query variable action=login
$action = (isset($_GET['action']) ) ? $_GET['action'] : 0;
// Login Page
if ($action === "login") { ?>
<?php
$login = (isset($_GET['login']) ) ? $_GET['login'] : 0;
if ( $login === "failed" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> Invalid username and/or password.</div>';
} elseif ( $login === "empty" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> Username and/or Password is empty.</div>';
} elseif ( $login === "false" ) {
echo '<div class="col-12 register-error"><strong>ERROR:</strong> You are logged out.</div>';
}
?>
<div class="col-md-5">
<?php
$args = array(
'redirect' => home_url().'/login/',
);
wp_login_form($args); ?>
<p class="text-center"><a class="mr-2" href="<?php echo wp_registration_url(); ?>">Register Now</a>
<span clas="mx-2">·</span><a class="ml-2" href="<?php echo wp_lostpassword_url( ); ?>" title="Lost Password">Lost Password?</a></p>
</div>
<?php
} else { // Register Page ?>
<?php if(get_option('users_can_register')) { ?>
<div class="col-md-5 manual-register-form">
<form action="" method="post">
<p>
<label for="user_login">Username</label>
<input type="text" name="username" placeholder="Type your Username Here" class="register-input mb-4" value="<?php if( ! empty($username) ) echo $username; ?>" /><br />
</p>
<p>
<label for="user_password">Password</label>
<input type="password" name="password" placeholder="Type your Password Here" class="register-input mb-4" value="<?php if( ! empty($password) ) echo $password; ?>" /><br />
</p>
<p>
<label for="user_email">Email</label>
<input type="text" name="email" placeholder="Type your Email Here" class="register-input mb-4" value="<?php if( ! empty($email) ) echo $email; ?>" /> <br />
</p>
<p>
<label for="phone_no">Phone</label>
<input type="text" name="phone_no" placeholder="Type your Phone Here" class="register-input mb-4" value="<?php if( ! empty($phone) ) echo $phone; ?>" /> <br />
</p>
<p>
<label for="ic_no">IC No</label>
<input type="text" name="ic_no" placeholder="Type your IC No Here" class="register-input mb-4" value="<?php if( ! empty($icno) ) echo $icno; ?>" /> <br />
</p>
<input type="submit" id="register-submit-btn" class="mb-4" name="submit" value="SignUp" />
</form>
<p>Already have an account? <a href="/login">Login Here</a></p>
</div>
<?php } else {
echo "Registration is currently disabled. Please try again later.";
}
} ?>
<?php
if ( $_POST ) {
$error = 0;
$username = esc_sql($_REQUEST['username']);
if ( empty($username) ) {
echo '<div class="col-12 register-error">User name should not be empty.</div>';
$error = 1;
}
$email = esc_sql($_REQUEST['email']);
if ( !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $email) ) {
echo '<div class="col-12 register-error">Please enter a valid email.</div>';
$error = 1;
}
$phone = esc_sql($_REQUEST['phone_no']);
if ( empty($phone) ) {
echo '<div class="col-12 register-error">Please enter a valid phone.</div>';
$error = 1;
}
$error = 0;
$icno = esc_sql($_REQUEST['ic_no']);
if ( empty($icno) ) {
echo '<div class="col-12 register-error">Please enter a valid IC No.</div>';
$error = 1;
}
if ( $error == 0 ) {
$password = esc_sql($_REQUEST['password']);
if ( empty($password) ) {
echo '<div class="col-12 register-error">Password should not be empty.</div>';
$error = 1;
}
$phone = get_user_meta( $user_id, 'phone_no', true );
$icno = get_user_meta( $user_id, 'ic_no', true );
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$icno = $_POST['ic_no'];
$phone = $_POST['phone_no'];
$user_data = [
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
];
$user_id = wp_insert_user( $user_data );
update_user_meta( $user_id, 'phone_no', $phone );
update_user_meta( $user_id, 'ic_no', $icno );
// // success
if ( ! is_wp_error( $user_id ) ) {
echo 'User created: '. $user_id;
}
else {
echo 'Registration error';
}
}
}
if ( $error != 2 ) { ?>
<?php }
} else { ?>
<p>You are logged in. Click <a href="<?php bloginfo('wpurl'); ?>">here to go home</a></p>
<?php } ?>
</div>
</div>
<?php get_footer();
?>
</body>
</html>
Share
Improve this question
asked Feb 23, 2021 at 2:55
RusydiRusydi
31 bronze badge
3
|
1 Answer
Reset to default 1I got the undefined variable : user_id when i use get_user_meta
This is because $user_id
is empty and undefined, you need to give it a value, and that value needs to be the ID of a user.
when i try put the above code below this line
no error occur but my value $phone and $icno become empty
Yes, you gave $user_id
a value so it worked. The reason phone and icno are empty is because there is no user meta for phone and icno. The order you do things in matters. Code is executed from the top of the file to the bottom.
You can't retrieve values before they are added, and you can't use variables before they are set.
2 final notes:
- indenting your code is important, especially if you share it with other people, and it eliminates an entire class of bugs
global $wpdb, $user_ID;
should be removed. The code never uses$wpdb
and there is no$user_ID
global variable unlesssetup_userdata
is called.
$user_id
is indeed not defined before thoseget_user_meta()
calls. Only$user_ID
that got defined earlier in your code. – Sally CJ Commented Feb 23, 2021 at 9:42