当前位置: 首页 > 知识库问答 >
问题:

在“编辑帐户”页面中添加自定义字段

轩辕煌
2023-03-14

我有自定义的签出字段favorite\u color用户可以在签出期间填写这些字段(不是必需的),类似于其他默认签出字段。。。

在“编辑帐户”的“我的帐户”部分,我想添加favorite\u color自定义字段,以允许客户编辑此字段值。

为此,我编辑了模板myaccount/formeditcount。php通过复制和编辑其中的原始代码行:

    <p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first">
    <label for="account_first_name"><?php _e( 'First name', 'woocommerce' ); ?> <span class="required">*</span></label>
    <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr( $user->first_name ); ?>" />
</p>

我用我最喜欢的颜色替换了帐户名,该字段甚至在字段中显示了保存的值(多亏了$user)-

但糟糕的是,它没有得到拯救。

我必须添加什么代码才能让这个工作和保存?

原始模板代码为:

<?php
/**
 * Edit account form
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/myaccount/form-edit-account.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see     https://docs.woocommerce.com/document/template-structure/
 * @author  WooThemes
 * @package WooCommerce/Templates
 * @version 2.6.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

do_action( 'woocommerce_before_edit_account_form' ); ?>

<form class="woocommerce-EditAccountForm edit-account" action="" method="post">

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

    <p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first">
        <label for="account_first_name"><?php _e( 'First name', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr( $user->first_name ); ?>" />
    </p>
    <p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last">
        <label for="account_last_name"><?php _e( 'Last name', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_last_name" id="account_last_name" value="<?php echo esc_attr( $user->last_name ); ?>" />
    </p>
    <div class="clear"></div>

    <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
        <label for="account_email"><?php _e( 'Email address', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="email" class="woocommerce-Input woocommerce-Input--email input-text" name="account_email" id="account_email" value="<?php echo esc_attr( $user->user_email ); ?>" />
    </p>

    <fieldset>
        <legend><?php _e( 'Password change', 'woocommerce' ); ?></legend>

        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="password_current"><?php _e( 'Current password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
            <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_current" id="password_current" />
        </p>
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="password_1"><?php _e( 'New password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
            <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_1" id="password_1" />
        </p>
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="password_2"><?php _e( 'Confirm new password', 'woocommerce' ); ?></label>
            <input type="password" class="woocommerce-Input woocommerce-Input--password input-text" name="password_2" id="password_2" />
        </p>
    </fieldset>
    <div class="clear"></div>

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

    <p>
        <?php wp_nonce_field( 'save_account_details' ); ?>
        <input type="submit" class="woocommerce-Button button" name="save_account_details" value="<?php esc_attr_e( 'Save changes', 'woocommerce' ); ?>" />
        <input type="hidden" name="action" value="save_account_details" />
    </p>

    <?php do_action( 'woocommerce_edit_account_form_end' ); ?>
</form>

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

共有1个答案

吴开宇
2023-03-14

这可以在不重写模板文件的情况下完成,只需通过以下方式使用可用的挂钩:

// Add the custom field "favorite_color"
add_action( 'woocommerce_edit_account_form', 'add_favorite_color_to_edit_account_form' );
function add_favorite_color_to_edit_account_form() {
    $user = wp_get_current_user();
    ?>
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
        <label for="favorite_color"><?php _e( 'Favorite color', 'woocommerce' ); ?></label>
        <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="favorite_color" id="favorite_color" value="<?php echo esc_attr( $user->favorite_color ); ?>" />
    </p>
    <?php
}

// Save the custom field 'favorite_color' 
add_action( 'woocommerce_save_account_details', 'save_favorite_color_account_details', 12, 1 );
function save_favorite_color_account_details( $user_id ) {
    // For Favorite color
    if( isset( $_POST['favorite_color'] ) )
        update_user_meta( $user_id, 'favorite_color', sanitize_text_field( $_POST['favorite_color'] ) );

    // For Billing email (added related to your comment)
    if( isset( $_POST['account_email'] ) )
        update_user_meta( $user_id, 'billing_email', sanitize_text_field( $_POST['account_email'] ) );
}

代码function.php活动子主题(或活动主题)的文件或任何插件文件中。

测试和工作。

如果您想重写模板以显示自定义字段,您只需保留第二个钩子函数(编辑时保存数据的函数)。

 类似资料:
  • 问题内容: 我正在尝试为我的应用程序创建一个帐户,在该帐户中我可以与我的帐户建立联系,例如facebook,viber,whatsapp等。我也希望我的帐户在设置的“帐户”部分中可见。有任何想法吗?我已经在Google上搜索了很多,但是找不到正确的答案从哪里开始。请帮忙。我试图创建一个帐户如下。这导致我出错。 问题答案: 您需要设置多个组件才能以编程方式创建一个帐户。你需要: AccountAut

  • 基于“在购物车和订单项名称下显示伍兹商业产品自定义字段”回答我以前的一个问题,代码在产品编辑页面上显示自定义字段。当填写这些字段时,数据将显示在产品页面上。 下面是代码: 如何在“管理”面板的“编辑订单”页面上显示自定义字段?它应该在产品名称后显示这些字段。 更新 据我所知,woocommerce\u checkout\u create\u order\u line\u item对此负责。但我无法

  • 我使用Woocommerce在我的Wordpress网站上销售数字下载。我已经能够使用一个插件来定制结账页面,这样客户只需给出他们的名字和姓氏以及电子邮件地址就可以购买产品。我想在客户信息页面上显示同样的内容,并编辑我的地址页面和帐户页面。 现在在帐户页面的底部,它正在从页面调用信息。它调用账单地址(名字和姓氏)和送货地址,这两个地址不显示,因为它们没有被要求输入送货地址。 我希望账单地址为“姓名

  • 我正在尝试从一个简单的wooCommerce商店的订单详细信息中删除“postcustom”元框。div#postcustom按顺序显示--- 我(目前)已将其连接到: 我也尝试过将“dashboard”和“post”作为$context,但都没有用。 我也尝试过用钩子删除meta框、admin init和其他一些。 我工作在一个子主题functions.php并使用默认的ooCommerce主题

  • 在WooCommerce 3.0发布之前,我的代码已经像魔法一样工作,将自定义值从购物车保存到结账时的订单中。但从那以后,我无法为订单创建自定义元。 环境:WordPress4.9。4.

  • 在Woocommerce中,下面的代码检索特定的自定义订单项目元数据,并在“管理编辑订单”页面的“常规”区域下添加一个可编辑的自定义字段: 现在,我试图用下面的代码保存自定义的可编辑字段值,但一旦我点击update,它就不会保存任何内容。 我做错了什么?如何保存此自定义字段值? 任何帮助都将不胜感激。

  • 我想向Wordpress中的现有页面添加一些额外的表单字段。每当您编辑帖子或页面时,此页面都会被重定向。我的问题是我不知道在哪里找到这个文件或者它的名字。 我需要知道我需要编辑什么文件才能添加新的输入。 只有当您是管理员并登录到仪表板时,才会看到此页面。 我使用wordpress边缘洗牌主题。

  • 我想为我在高级自定义字段的WYSISWG编辑器字段中发布的每个图像添加一个类。除了其他编辑器类之外,每个图像都应该有类。 如果我在普通的WordPress编辑器中添加图像,我已经设法添加了这个类。这是我的中的代码: 但是该代码不适用于高级自定义字段的WYSISWG编辑器字段。还有其他方法可以在内容中添加图像吗?