Data storing in the Database, Wordpress WooCommerc

2019-08-08 17:31发布

问题:

I am currently coding the following, and don't seem to get my database to interact with woocommerce, this is a sign up/register form, so the information basically just needs to be posted to the database so its logged for when the user needs to use it? I have however managed to get it to logged everything such as password/first name etc, but nothing to do with woocommerce such as billing address, here is my code hope you can help!

<div id="content">
<div class="titlebox" ><center><?php the_title(); ?></center></div>

<div class="description">
<center>
<strong><h2>Create an Account</h2></strong>
</center>
</div>

<?php
$err = '';
$success = '';

global $wpdb, $PasswordHash, $current_user, $user_ID;

if(isset($_POST['task']) && $_POST['task'] == 'register' ) {

    $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
    $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
    $first_name = $wpdb->escape(trim($_POST['first_name']));
    $last_name = $wpdb->escape(trim($_POST['last_name']));
    $description = $wpdb->escape(trim($_POST['description']));
    $email = $wpdb->escape(trim($_POST['email']));
    $username = $wpdb->escape(trim($_POST['username']));
    $url = $wpdb->escape(trim($_POST['url']));
    $aim = $wpdb->escape(trim($_POST['aim']));
    $yim = $wpdb->escape(trim($_POST['yim']));
    $jabber = $wpdb->escape(trim($_POST['jabber']));
    $googleplus = $wpdb->escape(trim($_POST['googleplus']));
    $billing_first_name = $wpdb->escape(trim($_POST['billing_first_name']));
    $billing_last_name = $wpdb->escape(trim($_POST['billing_last_name']));
    $billing_company = $wpdb->escape(trim($_POST['billing_company']));
    $billing_address_1 = $wpdb->escape(trim($_POST['billing_address_1']));
    $billing_address_2 = $wpdb->escape(trim($_POST['billing_address_2']));
    $billing_city = $wpdb->escape(trim($_POST['billing_city']));
    $billing_postcode = $wpdb->escape(trim($_POST['billing_postcode']));
    $billing_state = $wpdb->escape(trim($_POST['billing_state']));
    $billing_country = $wpdb->escape(trim($_POST['billing_country']));
    $billing_phone = $wpdb->escape(trim($_POST['billing_phone']));
    $billing_email = $wpdb->escape(trim($_POST['billing_email']));

    if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "" || $first_name == "" || $last_name == "" || $description == "" ) {
        $err = 'Please don\'t leave the required fields.';
    } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $err = 'Invalid email address.';
    } else if(email_exists($email) ) {
        $err = 'Email already exist.';
    } else if($pwd1 <> $pwd2 ){
        $err = 'Password do not match.';        
    } else {
        $user_id = wp_insert_user( array (
        'first_name'    => apply_filters('pre_user_first_name', $first_name), 
        'last_name'     => apply_filters('pre_user_last_name', $last_name),
        'url'           => apply_filters('pre_user_url', $url),
        'aim'           => apply_filters('pre_user_aim', $aim),
        'yim'           => apply_filters('pre_user_yim', $yim),
        'jabber'        => apply_filters('pre_user_jabber', $jabber),
        'googleplus'    => apply_filters('pre_user_googleplus', $googleplus),
        'description'   => apply_filters('pre_user_description', $description), 
        'user_pass'     => apply_filters('pre_user_pass', $pwd1), 
        'user_login'    => apply_filters('pre_user_login', $username), 
        'user_email'    => apply_filters('pre_user_email', $email), 
        'role'          => 'subscriber' 
        ) );
        if( is_wp_error($user_id) ) {
            $err = 'Error on user creation.';
        } else {
            do_action('user_register', $user_id);

            $success = 'You\'re successfully register';
        }
    }
}
?>

<div id="message">
    <?php 
        if(! empty($err) ) :
            echo '<p class="error">'.$err.'</p>';
        endif;
    ?>

    <?php 
        if(! empty($success) ) :
            echo '<p class="error">'.$success.'</p>';
        endif;
    ?>
</div>

<form method="post">
    <h3>Create Account.</h3>
    <p><label>Last Name</label></p>
    <p><input type="text" value="" name="last_name" id="last_name" /></p>
    <p><label>First Name</label></p>
    <p><input type="text" value="" name="first_name" id="first_name" /></p>
    <p><label>Description</label></p>
    <p><input type="text" value="" name="description" id="description" /></p>
    <p><label>url</label></p>
    <p><input type="text" value="" name="url" id="url" /></p>
    <p><label>aim</label></p>
    <p><input type="text" value="" name="aim" id="aim" /></p>
    <p><label>yim</label></p>
    <p><input type="text" value="" name="yim" id="yim" /></p>
    <p><label>jabber</label></p>
    <p><input type="text" value="" name="jabber" id="jabber" /></p>
    <p><label>googleplus</label></p>
    <p><input type="text" value="" name="googleplus" id="googleplus" /></p>
    <p><label>Email</label></p>
    <p><input type="text" value="" name="email" id="email" /></p>
    <p><label>Username</label></p>
    <p><input type="text" value="" name="username" id="username" /></p>
    <p><label>Password</label></p>
    <p><input type="password" value="" name="pwd1" id="pwd1" /></p>
    <p><label>Password again</label></p>
    <p><input type="password" value="" name="pwd2" id="pwd2" /></p>
    <p><label>Billing First Name</label></p>
    <p><input type="text" value="" name="billing_first_name" id="billing_first_name" /></p>
    <p><label>Billing Second Name</label></p>
    <p><input type="text" value="" name="billing_last_name" id="billing_last_name" /></p>
    <p><label>Billing Company</label></p>
    <p><input type="text" value="" name="billing_last_name" id="billing_last_name" /></p>
    <p><label>Billing Address Line 1</label></p>
    <p><input type="text" value="" name="billing_address_1" id="billing_address_1" /></p>
    <p><label>Billing Address Line 2</label></p>
    <p><input type="text" value="" name="billing_address_2" id="billing_address_2" /></p>
    <p><label>Billing City</label></p>
    <p><input type="text" value="" name="billing_city" id="billing_city" /></p>
    <p><label>Billing Postcode</label></p>
    <p><input type="text" value="" name="billing_postcode" id="billing_postcode" /></p>
    <p><label>Billing State</label></p>
    <p><input type="text" value="" name="billing_state" id="billing_state" /></p>
    <p><label>Billing Country</label></p>
    <p><input type="text" value="" name="billing_country" id="billing_country" /></p>
    <p><label>Billing Phone</label></p>
    <p><input type="text" value="" name="billing_phone" id="billing_phone" /></p>
    <p><label>Billing Email</label></p>
    <p><input type="text" value="" name="billing_email" id="billing_email" /></p>
    <div class="alignleft"><p><?php if($sucess != "") { echo $sucess; } ?> <?php if($err != "") { echo $err; } ?></p></div>
    <button type="submit" name="btnregister" class="button" >Submit</button>
    <input type="hidden" name="task" value="register" />
</form>

回答1:

I see what you're trying to do. The WP API is functioning correctly, but you don't have any calls to the WooCommerce API and that's why its not updating anything on the WooCommerce side of things. Here's the API for what you're wanting:

http://docs.woothemes.com/wc-apidocs/class-WC_Customer.html

EDIT

So after a bit of research, I discovered that WooCommerce user information is stored along with normal use data in the user meta table in the WordPress database. So to update the relevant WooCommerce information, just take a look into that table in the DB and find the names of the values you want to add/update.

update_user_meta($userId, 'company', $companydata);


回答2:

I don't know all the meta values that WooCommerce uses and I dont have a WordPress install nearby, I'm mainly working off what I know from my WP use in the past. Try this,

Create a new shopper account in the WordPress GUI and fill out every field of information for that user. Then go to your database manager, such as phpMyAdmin or anything else that let's you access your database directly and look at the user meta table to see what information you'll need. :/ I'm afraid that's about as much detail as I can give you.



回答3:

I have found that the data table in the database is 'fj2a27xri_usermeta' and the following in the cells in that table which are labelled meta key: Here is all of them i was using, yet still the billing and shipping don't log?

1-  first_name
2 - last_name
3 - description
4 - email
5 - username 
6 - url 
7 - aim
8 - yim
9 - jabber
10 - googleplus     
11 - billing_first_name 
12 - billing_last_name
13 - billing_company 
14 - billing_address_1
15 - billing_address_2
16 - billing_city 
17 - billing_postcode 
18 - billing_state 
19 - billing_country 
20 - billing_phone 
21 - billing_email

1-10 are working and 11-21 are NOT working?