php - 如何在 WooCommerce "My Account"页面上对自定义字段重新排序或添加优先级

标签 php wordpress woocommerce custom-fields account

我的“我的帐户”页面中有多个字段,因此,我想为出生日期添加其他字段。

我正在使用 Add birthday field to my account and admin user page 的一部分

该字段显示,但位于底部。

我想在 2 个现有字段之后添加 DOB 字段,我尝试使用“优先级 => 20”,但它不起作用。

// Add field - my account
function action_woocommerce_edit_account_form() {   
    woocommerce_form_field( 'birthday_field', array(
        'type'        => 'date',
        'label'       => __( 'My Birth Date', 'woocommerce' ),
        'placeholder' => __( 'Date of Birth', 'woocommerce' ),
        'required'    => true,
    ), get_user_meta( get_current_user_id(), 'birthday_field', true ));
}
add_action( 'woocommerce_edit_account_form', 'action_woocommerce_edit_account_form' );


// Validate - my account
function action_woocommerce_save_account_details_errors( $args ){
    if ( isset($_POST['birthday_field']) && empty($_POST['birthday_field']) ) {
        $args->add( 'error', __( 'Please provide a birth date', 'woocommerce' ) );
    }
}
add_action( 'woocommerce_save_account_details_errors','action_woocommerce_save_account_details_errors', 10, 1 );

// Save - my account
function action_woocommerce_save_account_details( $user_id ) {  
    if( isset($_POST['birthday_field']) && ! empty($_POST['birthday_field']) ) {
        update_user_meta( $user_id, 'birthday_field', sanitize_text_field($_POST['birthday_field']) );
    }
}
add_action( 'woocommerce_save_account_details', 'action_woocommerce_save_account_details', 10, 1 );

最佳答案

myaccount/form-edit-account.php 所示模板文件中,woocommerce_edit_account_form 操作 Hook 在添加现有字段后执行。

因此,如果您想在现有字段之间添加字段,则必须编辑模板文件

  • 可以通过将其复制到 yourtheme/woocommerce/myaccount/form-edit-account.php 来覆盖此模板

  1. 您必须删除当前使用的代码

  2. 将此代码添加到 myaccount/form-edit-account.php 模板文件中的 2 个现有字段之间(在您要添加新字段的位置)

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="account_birthday"><?php esc_html_e( 'Birth day', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
    <input type="date" class="woocommerce-Input woocommerce-Input--text input-text" name="account_birthday" id="account_birthday" value="<?php echo get_user_meta( get_current_user_id(), 'account_birthday', true ); ?>"/>
</p>
<div class="clear"></div>
  • 为了验证和保存,请将以下代码添加到 functions.php ( 或者您喜欢添加片段的方式)
  • // Validate - my account
    function action_woocommerce_save_account_details_errors( $args ){
        if ( isset( $_POST['account_birthday'] ) && empty( $_POST['account_birthday'] ) ) {
            $args->add( 'error', __( 'Please provide a birth date', 'woocommerce' ) );
        }
    }
    add_action( 'woocommerce_save_account_details_errors','action_woocommerce_save_account_details_errors', 10, 1 );
    
    // Save - my account
    function action_woocommerce_save_account_details( $user_id ) {  
        if( isset( $_POST['account_birthday'] ) && ! empty( $_POST['account_birthday'] ) ) {
            update_user_meta( $user_id, 'account_birthday', sanitize_text_field( $_POST['account_birthday'] ) );
        }
    }
    add_action( 'woocommerce_save_account_details', 'action_woocommerce_save_account_details', 10, 1 );
    

    关于php - 如何在 WooCommerce "My Account"页面上对自定义字段重新排序或添加优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65194759/

    相关文章:

    javascript - 我在登录表单中不断收到错误的用户名和密码

    php - WP - woocommerce 按订单列出产品类别

    php - 使用 WC_Tax::get_tax_classes() 获取所有 WooCommerce 税级

    php - 表单中下拉框的数据作为 'Array' 发送到数据库

    PHP/MySQL - 当 id 匹配时打印行

    wordpress - 标准 Wordpress 目录应具有哪些读/写/执行权限?

    php - bootstrap/Wordpress 中每行 3 个元素

    php - WooCommerce - 在开始/结束日期之间的列表中获取事件订阅

    php - 将日期传递给 where 子句时出错

    php - WooCommerce - 在免费送货可用时隐藏其他送货方式