【问题标题】:Adding extra fields - Wordpress (wp_insert_user & update_user_meta doesn't work)添加额外字段 - Wordpress(wp_insert_user 和 update_user_meta 不起作用)
【发布时间】:2014-11-11 14:29:21
【问题描述】:

我正在开发一个 wordpress 网站并使用插件: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-namelast-nameupdate_user_meta 也不会向数据库添加任何内容。

我哪里做错了?

【问题讨论】:

  • 因为这是jQuery ajax,你需要展示这段代码。使用控制台调试此**Echo 值您要检查并查看控制台。我怀疑你的标记,而不是抓取表单的所有值,jquery 单独抓取表单值并发送到你的 ajax 函数。
  • github.com/Sidneyvp/zm-ajax-login-register 在这里你会找到包括 jQuery 在内的所有代码。由于我在 jQuery 中不是那么好,所以我不知道在这里寻找什么。
  • hmm 其实这里只是重读了上面的内容....是你上面使用的整个过程吗?
  • 是的,以上就是我用过的整个过程。
  • 好吧,它是一个插件,所以最简单的方法是安装插件......然后你可以在任何你想要的地方使用你的表单代码,它可能会工作。你遗漏了一些重要的 ajax 工作步骤,所以我还建议阅读 jquery ajax for wordpress,你应该能够在几个小时内掌握它。

标签: php wordpress forms


【解决方案1】:

如果您尝试添加新字段,则需要使用 add_user_meta 不更新,因为数据库中没有记录可以将其更新为这样

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

如果您有任何问题,建议查看wordpress codex

编辑

@Alex 执行以下操作,它应该满足您的需要

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 );
}

【讨论】:

  • 不正确,如果存在,更新将创建元字段。
  • @David 很抱歉加入,但我如何添加不为空的 user_meta 值。就我而言,我有很多额外的个人资料字段,我喜欢存储/更新/删除。我从简单的 update_user_meta 开始,但我什至存储了空值。提前发送
  • 不太确定你在问什么,你最好用你的代码发布一个问题,但通常你应该测试你想要保存的值......例如if($value) update_user_meta($id,'val',$value);
  • @Alex 请查看修改后的评论
  • 错误信息。根据 Wordpress Codex > update_user_meta() “如果用户的元字段不存在,它将被添加。”
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多