通过前端更新用户配置文件

时间:2019-05-23 作者:Markus

我对WordPress很陌生,所以我有一个简单的初学者问题。

我在管理表单上添加了一些自定义用户字段show_user_profile, edit_user_profile, personal_options_update, 和edit_user_profile_update. 一切都很好。

现在,我想让我的用户能够通过前端更新他们的个人资料。因此,我创建了一个简单的HTML表单:

 <form method="POST" action="">

        <div class="form-group">
            <label for="firstname">Name</label>
            <input type="text"
                   name="firstname"
                   id="firstname"
                   value="<?= esc_attr(wp_get_current_user()->user_firstname) ?>"
                   placeholder="Vorname">
        </div>

        <div class="form-group">
            <label for="name">Name</label>
            <input type="text"
                   name="name"
                   id="name"
                   value="<?= esc_attr(wp_get_current_user()->user_lastname) ?>"
                   placeholder="Name">
        </div>

        <div class="form-group">
            <label for="username">Benutzername</label>
            <input type="text"
                   name="username"
                   id="username"
                   value="<?= esc_attr(wp_get_current_user()->user_login) ?>"
                   placeholder="Benutzername">
        </div>

        <div class="form-group">
            <label for="street">Straße</label>
            <input type="text"
                   name="street"
                   id="street"
                   value="<?= esc_attr(get_user_meta(get_current_user_id(), \'street\', true)) ?>"
                   placeholder="Straße">
        </div>

        <div class="form-group">
            <div class="row">
                <div class="col-md-4">
                    <label for="zip">PLZ</label>
                    <input type="text"
                           name="zip"
                           id="zip"
                           value="<?=  esc_attr(get_user_meta(get_current_user_id(), \'zipcode\', true)) ?>"
                           placeholder="PLZ"
                           maxlength="5">
                </div>
                <div class="col-md-8">
                    <label for="location">Ort</label>
                    <input type="text"
                           name="location"
                           id="location"
                           value="<?= esc_attr(get_user_meta(get_current_user_id(), \'city\', true)) ?>"
                           placeholder="Ort">
                </div>
            </div>
        </div>

        <div class="form-group">
            <label for="street">Telefonnummer</label>
            <input type="text"
                   name="phone"
                   id="phone"
                   placeholder="Telefonnummer"
                   value="<?= esc_attr(get_user_meta(get_current_user_id(), \'phone\', true)) ?>">
        </div>

        <div class="form-group">
            <label for="street">E-Mail-Adresse</label>
            <input type="email"
                   name="email"
                   id="email"
                   value="<?= esc_attr(wp_get_current_user()->user_email) ?>"
                   placeholder="E-Mail-Adresse">
        </div>

        <button type="submit" class="btn-mitmachen btn-small">Speichern</button>
    </form>
我的问题是,我应该用表单调用哪个操作来更新当前登录的用户?是否有类似于钩子的东西,或者我自己为概要文件编写逻辑?

1 个回复
SO网友:Ryan DiMascio

我很快就写了这篇文章,它还没有经过测试,代码可能很松散,但它为您提供了如何使用AJAX实现这一点的想法。

<form id="update_user">
    <div class="form-group">
        <label for="firstname">Name</label>
        <input type="text"
               name="firstname"
               id="firstname"
               value="<?= esc_attr(wp_get_current_user()->user_firstname) ?>"
               placeholder="Vorname">
    </div>

    <div class="form-group">
        <label for="name">Name</label>
        <input type="text"
               name="name"
               id="name"
               value="<?= esc_attr(wp_get_current_user()->user_lastname) ?>"
               placeholder="Name">
    </div>

    <div class="form-group">
        <label for="username">Benutzername</label>
        <input type="text"
               name="username"
               id="username"
               value="<?= esc_attr(wp_get_current_user()->user_login) ?>"
               placeholder="Benutzername">
    </div>

    <div class="form-group">
        <label for="street">Straße</label>
        <input type="text"
               name="street"
               id="street"
               value="<?= esc_attr(get_user_meta(get_current_user_id(), \'street\', true)) ?>"
               placeholder="Straße">
    </div>

    <div class="form-group">
        <div class="row">
            <div class="col-md-4">
                <label for="zip">PLZ</label>
                <input type="text"
                       name="zip"
                       id="zip"
                       value="<?=  esc_attr(get_user_meta(get_current_user_id(), \'zipcode\', true)) ?>"
                       placeholder="PLZ"
                       maxlength="5">
            </div>
            <div class="col-md-8">
                <label for="location">Ort</label>
                <input type="text"
                       name="location"
                       id="location"
                       value="<?= esc_attr(get_user_meta(get_current_user_id(), \'city\', true)) ?>"
                       placeholder="Ort">
            </div>
        </div>
    </div>

    <div class="form-group">
        <label for="street">Telefonnummer</label>
        <input type="text"
               name="phone"
               id="phone"
               placeholder="Telefonnummer"
               value="<?= esc_attr(get_user_meta(get_current_user_id(), \'phone\', true)) ?>">
    </div>

    <div class="form-group">
        <label for="street">E-Mail-Adresse</label>
        <input type="email"
               name="email"
               id="email"
               value="<?= esc_attr(wp_get_current_user()->user_email) ?>"
               placeholder="E-Mail-Adresse">
    </div>

    <input type="submit" class="btn-mitmachen btn-small" value="Speichern" />
</form>
创建一个名为

/assets/js/update-user.js
并添加AJAX函数,该函数将值传递给函数中的edit\\u用户。php

function updateTheUser() {

    $.ajax({
        url: ajax_params.url,
        method: \'POST\',
        data: {
            action: \'update_user\',
            security: ajax_params.nonce,
            user_id: ajax_params.user,
            email: $( \'#email\' ).val()
            first_name: $( \'#firstname\' ).val(),
            last_name: $( \'#name\' ).val(),
            username: $( \'#username\' ).val(),
            street: $( \'#street\' ).val(),
            zip: $( \'#zip\' ).val(),
            location: $( \'#location\' ).val(),
            phone: $( \'#phone\' ).val()
        },
        beforeSend: function( xhr ) {
            // Do something before like add loading animation
        },
        success: function( data ) {
            // Do something on success like redirect the user
        }
    })
}

$( \'#update_user\' ).on( \'submit\', updateTheUser )
在函数中。php您需要本地化刚刚使用AJAX URL和nonce值创建的JavaScript文件。

wp_enqueue_script( \'update-user\', get_template_directory_uri() . \'/assets/js/update-user.js\', array(\'jquery\'), \'\', true );

wp_localize_script( \'pricebreaks-custom\', \'ajax_params\', array(
  \'url\'         => admin_url( \'admin-ajax.php\' ),
  \'nonce\'       => wp_create_nonce( \'ajax_validation\' ),
  \'user\'        => get_current_user_id()
));
然后需要编写功能来编辑用户。您无法更新user\\u登录名,因此我建议您改为编辑昵称或显示名。

function edit_user_ajax_handler() {

    // Ensure we have the data we need to continue
    if( ! isset( $_POST ) || empty( $_POST ) || ! is_user_logged_in() ) {

        // If we don\'t - return custom error message and exit
        header( \'HTTP/1.1 400 Empty POST Values\' );
        echo \'Could Not Verify POST Values.\';
        exit;
    }

    check_ajax_referer( \'ajax_validation\', \'security\' );

    $user_id = $_POST[\'user_id\'];

    $user_id = wp_update_user( array(
        \'ID\' => $user_id,
        \'first_name\' => $_POST[\'first_name\'];
        \'last_name\' => $_POST[\'last_name\'];
        \'user_email\' => $_POST[\'email\'];
        \'nickname\' => $_POST[\'username\'];
    ) );

    if ( is_wp_error( $user_id ) ) {
      // There was an error, probably that user doesn\'t exist.
    } else {

        update_user_meta( $user_id, \'street\', $_POST[\'street\'], get_user_meta( $user_id, \'street\', true ) )
        update_user_meta( $user_id, \'zip\', $_POST[\'zip\'], get_user_meta( $user_id, \'zip\', true ) )
        update_user_meta( $user_id, \'location\', $_POST[\'location\'], get_user_meta( $user_id, \'location\', true ) )
        update_user_meta( $user_id, \'phone\', $_POST[\'phone\'], get_user_meta( $user_id, \'phone\', true ) )

    }
}
add_action(\'wp_ajax_edit_user\', \'edit_user_ajax_handler\');
add_action(\'wp_ajax_nopriv_edit_user\', \'edit_user_ajax_handler\');

相关推荐

如何在执行了钩子“preGet_USERS”之后获得所有的用户列表?

我在管理用户仪表板中有一个名为“用户类型”的自定义过滤器,我已经解决了在用户管理仪表板中显示它们的问题。但我不知道如何调用它们并将其保存在数组中,以便获取user\\u id并执行另一个操作。我的另一个操作是获取某个用户的所有元键,并将它们导出到excel文件中。但在我可以这样做之前,我应该有一个选项来过滤它们或只是导出所有用户,我已经执行了这项操作。function add_course_section_filter() { if ( isset( $_GET[ \'user_type\