【问题标题】:Adding custom field on ckeckout page在结帐页面上添加自定义字段
【发布时间】:2021-11-18 20:22:00
【问题描述】:

早上好, 我编写/修改了以下代码以在 woocommerce 上创建 2 个不同的新文件(bithdate 和 city of bith)。 一切都像一个魅力(在管理页面,在我的帐户页面中),但我想在结帐页面上显示它们(所以在客户第一次购买东西时,我也可以收集该信息 [必需])。

function action_woocommerce_edit_account_form() {   
woocommerce_form_field( 'birthday_field', array(
    'type'        => 'date',
    'label'       => __( 'Data di nascita', 'woocommerce' ),
    'placeholder' => __( 'Data di nascita', 'woocommerce' ),
    'required'    => true,
), get_user_meta( get_current_user_id(), 'birthday_field', true ));
 woocommerce_form_field( 'birthcity_field', array(
    'type'        => 'text',
    'label'       => __( 'Città di nascita', 'woocommerce' ),
    'placeholder' => __( 'Città di nascita', 'woocommerce' ),
    'required'    => true,
), get_user_meta( get_current_user_id(), 'birthcity_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', __( 'Prego inserire data di nascita', 'woocommerce' ) );
}
if ( isset($_POST['birthcity_field']) && empty($_POST['birthcity_field']) ) {
    $args->add( 'error', __( 'Prego inserire città di nascita', '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']) );
}
if( isset($_POST['birthcity_field']) && ! empty($_POST['birthcity_field']) ) {
    update_user_meta( $user_id, 'birthcity_field', sanitize_text_field($_POST['birthcity_field']) );
}
}
add_action( 'woocommerce_save_account_details', 'action_woocommerce_save_account_details', 10, 1 );
// Add field - admin
function add_user_birtday_field( $user ) {
?>
    <h3><?php _e('Dati aggiuntivi','woocommerce' ); ?></h3>
    <table class="form-table">
        <tr>
            <th><label for="birthday_field"><?php _e( 'Data di nascita', 'woocommerce' ); ?></label></th>
            <td><input type="date" name="birthday_field" value="<?php echo esc_attr( get_the_author_meta( 'birthday_field', $user->ID )); ?>" class="regular-text" /></td>
        </tr>
    </table>
    <br />
    
    <table class="form-table">
        <tr>
            <th><label for="birthcity_field"><?php _e( 'Città di nascita', 'woocommerce' ); ?></label></th>
            <td><input type="text" name="birthcity_field" value="<?php echo esc_attr( get_the_author_meta( 'birthcity_field', $user->ID )); ?>" class="regular-text" /></td>
        </tr>
    </table>
    <br />
<?php
}
add_action( 'show_user_profile', 'add_user_birtday_field', 10, 1 );
add_action( 'edit_user_profile', 'add_user_birtday_field', 10, 1 );
add_action( 'show_user_profile', 'add_user_birthcity_field', 10, 1 );
add_action( 'edit_user_profile', 'add_user_birthcity_field', 10, 1 );
// Save field - admin
function save_user_birtday_field( $user_id ) {
if( ! empty($_POST['birthday_field']) ) {
    update_user_meta( $user_id, 'birthday_field', sanitize_text_field( $_POST['birthday_field'] ) );
}
if( ! empty($_POST['birthcity_field']) ) {
    update_user_meta( $user_id, 'birthcity_field', sanitize_text_field( $_POST['birthcity_field'] ) );
}
}
add_action( 'personal_options_update', 'save_user_birtday_field', 10, 1 );
add_action( 'edit_user_profile_update', 'save_user_birtday_field', 10, 1 );
add_action( 'personal_options_update', 'save_user_birthcity_field', 10, 1 );
add_action( 'edit_user_profile_update', 'save_user_birthcity_field', 10, 1 );

我会非常感谢所有可以帮助我的人。 温暖的问候 麦芽酒

【问题讨论】:

  • 如果您使用现有代码,请引用source,因为它给予了作者适当的信任。

标签: woocommerce checkout


【解决方案1】:

我在这篇文章Post on Stackoverflow 的启发下自己解决了问题,但是像往常一样,我想分享解决方案,因为可能对某人有所帮助。

根据上面贴出的代码,您可以使用以下代码在结帐页面上添加字段:

// Add the field to the checkout
add_action( 'woocommerce_after_checkout_billing_form', 'birth_day_checkout_field' );
function birth_day_checkout_field( $checkout ) {
// if customer is logged in and his birth date is defined
if(!empty(get_user_meta( get_current_user_id(), 'birthday_field', true ))){
$checkout_birht_date = esc_attr(get_user_meta( get_current_user_id(), 'birthday_field', true ));
}
// The customer is not logged in or his birth date is NOT defined
else {
    $checkout_birht_date = $checkout->get_value( 'birthday_field' );
}
echo '<p id="custom_birthday_field">';
woocommerce_form_field( 'birthday_field', array(
    'type'          => 'date',
    'class'         => array('birth-date form-row-wide'),
    'label'         => __( 'Data di nascita', 'woocommerce' ),
    'placeholder'   => __( 'mm/dd/yyyy', 'woocommerce' ),
    'required'    => true,
    ), $checkout_birht_date);
echo '</p>';
}
// Process the checkout
add_action('woocommerce_checkout_process','birth_day_checkout_field_process');
function birth_day_checkout_field_process() {
// Check if set, if its not set add an error.
if ( ! $_POST['birthday_field'] )
wc_add_notice( __( 'Inserire la <strong>Data di nascita</strong>', 'woocommerce' ), 'error' )
;
}
// update order meta with field value
add_action( 'woocommerce_checkout_update_order_meta', 'birth_day_checkout_field_update_order_meta' );
function birth_day_checkout_field_update_order_meta( $order_id ) {
if (!empty( $_POST['birthday_field'])){
    update_post_meta( $order_id, 'birthday_field', sanitize_text_field( $_POST['birthday_field'] ) );
// updating user meta (for customer my account edit details page post data)

update_user_meta( get_post_meta( $order_id, '_customer_user', true ), 'birthday_field', sanitize_text_field($_POST['birthday_field']) );
}
}
// update user meta with Birth date (in checkout and my account edit details pages)
add_action ( 'personal_options_update', 'birth_day_save_extra_profile_fields' );
add_action ( 'edit_user_profile_update', 'birth_day_save_extra_profile_fields' );
add_action( 'woocommerce_save_account_details', 'birth_day_save_extra_profile_fields' );
function birth_day_save_extra_profile_fields( $user_id )
{
// for checkout page post data
if ( isset($_POST['birthday_field']) ) {
    update_user_meta( $user_id, 'birthday_field', sanitize_text_field($_POST['birthday_field']) );
}
// for customer my account edit details page post data
if ( isset($_POST['birthday_field']) ) {
    update_user_meta( $user_id, 'birthday_field', sanitize_text_field($_POST['birthday_field']) );
}
}

通过这种方式,这些数据将随处更新(我的帐户、管理员和结帐)。 温暖的问候 麦芽酒

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2021-04-30
    • 2020-09-09
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2012-09-19
    相关资源
    最近更新 更多