source

추가 필드 추가 - Wordpress (wp_insert_user & update_user_meta가 작동하지 않음)

nicesource 2023. 10. 21. 10:30
반응형

추가 필드 추가 - Wordpress (wp_insert_user & update_user_meta가 작동하지 않음)

워드프레스 사이트에서 작업중이며 플러그인을 사용하고 있습니다.zm-ajax-login-register등록하기 & 로그인하기.

제가 사용하는 코드에서는 로그인 이름, 이메일, 비밀번호만 등록합니다.

내 여분의 필드는 데이터베이스에 추가되지 않습니다.

여기에서 찾을 수 있는 모든 코드: Github

레지스터 양식에 다음과 같은 추가 필드를 만들었습니다.

<div class="form-wrapper">
                    <?php
                    wp_nonce_field( 'facebook-nonce', 'facebook_security' );
                    wp_nonce_field( 'register_submit', 'security' );
                    ?>
                    <div class="ajax-login-register-status-container">
                        <div class="ajax-login-register-msg-target"></div>
                    </div>
                    <div class="noon"><label><?php _e('User Name', 'ajax_login_register'); ?></label><input type="text" required name="login" class="user_login" /></div>

                    <div class="noon"><label><?php _e('First Name', 'ajax_login_register'); ?></label><input type="text" required name="first_name" class="first_name" /></div>
                    <div class="noon"><label><?php _e('Last Name', 'ajax_login_register'); ?></label><input type="text" required name="last_name" class="last_name" /></div>

                    <div class="noon"><label><?php _e('Email', 'ajax_login_register'); ?></label><input type="text" required name="email" class="user_email ajax-login-register-validate-email" /></div>

                    <div class="noon"><label><?php _e('Street', 'ajax_login_register'); ?></label><input type="text" required name="street" class="street" /></div>
                    <div class="noon"><label><?php _e('Housenumber', 'ajax_login_register'); ?></label><input type="number" required name="housenumber" class="housenumber" /></div>
                    <div class="noon"><label><?php _e('City', 'ajax_login_register'); ?></label><input type="text" required name="city" class="city" /></div>
                    <div class="noon"><label><?php _e('Zipcode', 'ajax_login_register'); ?></label><input type="number" required name="zipcode" class="zipcode" /></div>
                    <div class="noon"><label><?php _e('Phone', 'ajax_login_register'); ?></label><input type="number" required name="phone" class="phone" /></div>

                    <?php do_action( 'zm_ajax_login_register_below_email_field' ); ?>

                    <div class="noon"><label><?php _e('Password', 'ajax_login_register'); ?></label><input type="password" required name="password" class="user_password" /></div>
                    <div class="noon"><label><?php _e('Confirm Password', 'ajax_login_register'); ?></label><input type="password" required name="confirm_password" class="user_confirm_password" /></div>

                    <div class="noon"><a href="#" class="already-registered-handle"><?php echo apply_filters( 'ajax_login_register_already_registered_text', __('Already registered?','ajax_login_register') ); ?></a></div>
                    <div class="button-container">
                        <input class="register_button green" type="submit" value="<?php _e('Register','ajax_login_register'); ?>" accesskey="p" name="register" disabled />
                    </div>
                </div>

레지스터 페이지에서 사용자 배열에 데이터를 추가했습니다.

$user = array(
            'login'    => empty( $_POST['login'] ) ? $login : sanitize_text_field( $_POST['login'] ),

            'first_name'    => empty($_POST['first_name']),
            'last_name'    => empty($_POST['last_name']),

            'email'    => empty( $_POST['email'] ) ? $email : sanitize_text_field( $_POST['email'] ),

            'street'    => empty( $_POST['street'] ),
            'housenumber'    => empty( $_POST['housenumber'] ),
            'city'    => empty( $_POST['city'] ),
            'zipcode'    => empty( $_POST['zipcode'] ),
            'phone'    => empty( $_POST['phone'] ),

            'password' => empty( $_POST['password'] ) ? $password : sanitize_text_field( $_POST['password'] ),
            'fb_id'    => empty( $_POST['fb_id'] ) ? false : sanitize_text_field( $_POST['fb_id'] )
        );

그다음에 사용.wp_insert_user다음과 같이 데이터를 삽입합니다.

$userdata = array(
                        'user_login' => $user['login'],
                        'user_pass' => $user['password'],
                        'first_name' => $user['first_name'],
                        'last_name' => $user['last_name'],
                        'user_nicename' => $user['login'],
                        'user_email' => $user['email'],
                        'user_registered' => date_default_timezone_get(),
                        'display_name' => $user['login'],
                        /*'street' => $user['street'],
                        'housenumber' => $user['housenumber'],
                        'city' => $user['city'],
                        'zipcode' => $user['zipcode'],
                        'phone' => $user['phone'],*/
                    );

            $user_id = wp_insert_user( $userdata );

그 다음에 다음을 사용하여 데이터베이스에 추가 필드를 추가합니다.update_user_meta

update_user_meta( $user_id, 'street', $user['street'] );
update_user_meta( $user_id, 'housenumber', $user['housenumber'] );
update_user_meta( $user_id, 'city', $user['city'] );
update_user_meta( $user_id, 'zipcode', $user['zipcode'] );
update_user_meta( $user_id, 'phone', $user['phone'] );

wp_insert_user가 추가하지 않습니다.first-name아니면last-name또한.update_user_meta데이터베이스에 원하는 항목을 추가합니다.

어디서부터 제가 잘못했을까요?

새 필드를 추가하려는 경우 데이터베이스 내에 업데이트할 레코드가 없으므로 add_user_meta not update를 사용해야 합니다.

<?php add_user_meta( "user_id", "shoe_size", "13", false ); ?>

문제가 있다면 단어 프레스 코덱스를 보는 것을 추천합니다.

편집

@알렉스는 당신이 필요한 일을 해야합니다.

if (get_user_meta($userID, 'street', true)){
      update_user_meta( $user_id, 'street', $_POST['street'], true );
}else{
      add_user_meta( $user_id, 'street', $_POST['street'], false );
}

언급URL : https://stackoverflow.com/questions/26867182/adding-extra-fields-wordpress-wp-insert-user-update-user-meta-doesnt-work

반응형