在 Woocommerce 用户注册表单中添加额外的复选框并保存/显示是否在后端作为用户额外数据选中

Add extra checkboxes in Woocommerce user register form and saving / showing if are checked in the backend as user extra data

我想在后台显示,当查看用户详细信息时是否在创建用户时选中了复选框,这里是帮助我在注册表单中实现额外复选框的代码。

function woocommerce_edit_my_account_page() {
    return apply_filters( 'woocommerce_forms_field', array(
        'woocommerce_my_account_page' => array(
            'type'        => 'checkbox',
            'label'       => __( 'Soy mayor de 18'),
            'required'    => true,
        ),
        array(
            'type'        => 'checkbox',
            'label'       => __( 'Le doy permiso de usar mis datos'),
            'required'    => true,
        ),
    ) );
}
function edit_my_account_page_woocommerce() {
    $fields = woocommerce_edit_my_account_page();
    foreach ( $fields as $key => $field_args ) {
        woocommerce_form_field( $key, $field_args );
    }
}
add_action( 'woocommerce_register_form', 'edit_my_account_page_woocommerce', 15 );

您的第一个函数存在错误,因为每个复选框都需要自己的 $key 才能保存。

这是您重新访问的代码,它将首先验证强制复选框,保存值并将它们显示在管理用户仪表板中:

function registration_custom_checkboxes() {
    return apply_filters( 'woocommerce_forms_field', array(
        'age_ckeck' => array(
            'type'        => 'checkbox',
            'label'       => __("Soy mayor de 18", "woocommerce"),
            'required'    => true,
        ),
        'permission_ckeck' => array(
            'type'        => 'checkbox',
            'label'       => __("Le doy permiso de usar mis datos", "woocommerce"),
            'required'    => true,
        )
    ) );
}

// Display checkboxes in Registration form
add_action( 'woocommerce_register_form', 'add_registration_custom_checkboxes', 15 );
function add_registration_custom_checkboxes() {
    foreach ( registration_custom_checkboxes() as $field_key => $field_args ) {
        woocommerce_form_field( $field_key, $field_args );
    }
}
// Validation for mandatory checkboxes in Registration form
add_action( 'woocommerce_register_post', 'registration_custom_checkboxes_validation', 10, 3 );
function registration_custom_checkboxes_validation( $username, $email, $validation_errors ) {
    $fields = registration_custom_checkboxes();
    foreach ( array_keys($fields) as $field_key ) {
        if ( ! isset( $_POST[$field_key] ) {
            if ( $field_key === 'age_ckeck' ) {
                $validation_errors->add( $field_key . '_error', __("You need to approve that your are at leats 18 years old.", "woocommerce") );
            } else {
                $validation_errors->add( $field_key . '_error', __("You have to allow us to use your data.", "woocommerce") );
            }
        }
    }
    return $validation_errors;
}

// Save registration checkboxes fields values
add_action( 'woocommerce_created_customer', 'save_registration_custom_checkboxes_values' );
function save_registration_custom_checkboxes_values( $customer_id ) {
    $fields = registration_custom_checkboxes();
    foreach ( array_keys($fields) as $field_key ) {
        if ( isset( $_POST[$field_key] )  ) {
            update_user_meta( $customer_id, $field_key, '1' );
        }
    }
}


// Admin WP User: Display checkboxes fields on user profile
add_action ( 'show_user_profile', 'display_user_custom_checkboxes_fields' );
add_action ( 'edit_user_profile', 'display_user_custom_checkboxes_fields' );
function display_user_custom_checkboxes_fields( $user ){
    echo '<h3>'.__("Age and permission checks", "woocommerce").'</h3>';
    foreach ( registration_custom_checkboxes() as $field_key => $field_args ) {
        woocommerce_form_field( $field_key, $field_args, get_user_meta( $user->id, $field_key, true ) );
    }
}


// Admin WP User: Update checkboxes fields values
add_action( 'personal_options_update', 'save_user_custom_checkboxes_values' );
add_action( 'edit_user_profile_update', 'save_user_custom_checkboxes_values' );
function save_user_custom_checkboxes_values( $user_id ) {
    $fields = registration_custom_checkboxes();
    foreach ( array_keys($fields) as $field_key ) {
        $value = isset( $_POST[$field_key] ) ? '1' : '0';
        update_user_meta( $user_id, $field_key, $value );
        // error_log( ('Key: ' . $field_key . ' | posted: ' . $_POST[$field_key] . ' | value: ' . $value) );
    }
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。