使用Woocommerce更新Wordpress上的用户信息?

时间:2014-06-11 20:25:41

标签: php mysql wordpress admin

我目前正在使用Wordpress和2个插件 http://www.wpexplorer.com/wordpress-user-contact-fields/ 和 Woocommerce

我正在使用woocommerce的一个端点,名为form-edit-account.php,但它允许用户编辑他的信息。

问题是,每次按下更新,所有内容都会正确更新但电话号码。我在动画片之间加了一切。

<?php wc_print_notices(); ?>

<form action="" method="post">

    <p class="form-row form-row-first">
        <label for="account_first_name"><?php _e( 'First name', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="text" class="input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr( $user->first_name ); ?>" />
    </p>
    <p class="form-row form-row-last">
        <label for="account_last_name"><?php _e( 'Last name', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="text" class="input-text" name="account_last_name" id="account_last_name" value="<?php echo esc_attr( $user->last_name ); ?>" />
    </p>
    <p class="form-row form-row-wide">
        <label for="account_email"><?php _e( 'Email address', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="email" class="input-text" name="account_email" id="account_email" value="<?php echo esc_attr( $user->user_email ); ?>" />
    </p>
    <p class="form-row form-row-first">
        <label for="password_1"><?php _e( 'Password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
        <input type="password" class="input-text" name="password_1" id="password_1" />
    </p>
    <p class="form-row form-row-last">
        <label for="password_2"><?php _e( 'Confirm new password', 'woocommerce' ); ?></label>
        <input type="password" class="input-text" name="password_2" id="password_2" />
    </p>
    *****************
    <p class="form-row form-row-wide">
        <label for="account_phone"><?php _e( 'Phone', 'woocommerce' ); ?> </label>
        <input type="text" class="input-text" name="phone" id="phone" value="<?php echo esc_attr( $user->phone ); ?>" />
    </p>
    *****************
    <div class="clear"></div>

    <p><input type="submit" class="button" name="save_account_details" value="<?php _e( 'Save changes', 'woocommerce' ); ?>" /></p>

    <?php wp_nonce_field( 'save_account_details' ); ?>
    <input type="hidden" name="action" value="save_account_details" />
</form>

有没有继续使用woocommerce来更新这个自定义信息?对不起,我对woocommerce和基于用户的网站都很新。

由于

2 个答案:

答案 0 :(得分:3)

@doublesharp

您的代码中存在一些错误。

update_usermeta

实际上是

update_user_meta

add_action("save_account_details",...

应该是

add_action( 'woocommerce_save_account_details',...

所以完整的代码应该是

function save_additional_account_details( $user_ID ){
    $phone = ! empty( $_POST['phone'] ) ? wc_clean( $_POST['phone'] ) : '';
    update_user_meta( $user_ID, 'phone', $phone );
}
add_action( 'woocommerce_save_account_details', 'save_additional_account_details' );

给我一​​点试验和错误来解决这个问题,但是你给了我一个正确的轨道,谢谢!

干杯, 亚历

答案 1 :(得分:0)

save_account_details()函数处理form-edit-account.php的表单处理。一旦默认保存完成且没有错误,就会有一个名为woocommerce_save_account_details的动作挂钩,您可以使用它来保存更多信息 - 它只将用户ID作为参数,但其余信息可在{ {1}}。

$_POST

您在页面中添加的代码也存在一些问题:

  • function save_additional_account_details( $user_ID ){ $phone = ! empty( $_POST['phone'] ) ? wc_clean( $_POST['phone'] ) : ''; update_usermeta( $user_ID, 'phone', $phone ); } add_action( 'save_account_details', 'save_additional_account_details' ); 代码的for属性必须与<label>代码的name匹配,因此&#34;电话&#34;
  • 没有理由<input>除非&#34;电话&#34;存在于WooCommerce翻译
  • 您需要使用get_usermeta()访问当前值(将作为用户元数据存储)。
  • 如果您要修改此文件,则应将此文件复制到您自己的名称之一 - 升级到WooCommerce可能会覆盖您的更改。

您的其他代码应如下所示。

_e( 'Phone', 'woocommerce' );