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

WooCommerce客户账单地址

凌宏大
2023-03-14

我试图添加一个增值税字段到客户账单地址,而这在结账页面上的工作与以下代码:

// Company Name Required
add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');
function custom_override_checkout_fields($fields){
    $fields['billing']['billing_company']['required'] = true;
    $fields['billing']['billing_vat'] = array(
    'label'       => __('VAT Number','woocommerce'),
    'placeholder' => _x('Enter VAT Number','placeholder','woocommerce'),
    'required'    => true,
    'class'       => array('form-row-wide'),
    'clear'       => true
    );
    return $fields;
}
//Display field value on the order edit page
add_action('woocommerce_admin_order_data_after_shipping_address','my_custom_checkout_field_display_admin_order_meta',10,1);
function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('VAT Number').':</strong> ' . get_post_meta($order->id,'_billing_vat',true) . '</p>';
}
//Order the fields
add_filter("woocommerce_checkout_fields","order_fields");
function order_fields($fields){
    $order = array(
        "billing_first_name",
        "billing_last_name",
        "billing_company",
        "billing_vat",
        "billing_country",
        "billing_city",
        "billing_postcode",
        "billing_state",
        "billing_address_1",
        "billing_address_2",
        "billing_email",
        "billing_phone",
    );
foreach($order as $field){$ordered_fields[$field] = $fields["billing"][$field];}
$fields["billing"] = $ordered_fields;
return $fields;
}

我还要求在帐户选项中的客户账单地址上设置它。因为我需要将此链接到注册页面,因为我希望用户用他们所有的凭据注册,包括他们拥有的B2B网店的增值税号码。

是否有人知道或能为我指出正确的方向,我将如何执行此任务,不仅在结帐页面上显示增值税号码的账单字段,而且在用户配置文件页面上显示,以及如何在注册页面上添加所有这些字段?

在此情况下提前感谢任何帮助!

共有1个答案

施玉宸
2023-03-14

嗯,很简单。您的代码应该如下所示:

/* ---------------------- Registration page ----------------------- */

/* Add extra fields in registration form */
add_action( 'woocommerce_register_form_start', 'my_extra_register_fields' );
function my_extra_register_fields() {
?>
    <p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
        <label for="reg_billing_vat"><?php _e( 'Billing VAT', 'woocommerce' ); ?><span class="required">*</span></label>
        <input type="text" class="input-text" name="billing_vat" id="reg_billing_vat" value="<?php if ( ! empty( $_POST['billing_vat'] ) ) esc_attr_e( $_POST['billing_vat'] ); ?>">
    </p>
    <div class="clearfix"></div>
<?php
}

/* registration form fields Validation */
add_action( 'woocommerce_register_post', 'my_validate_extra_register_fields', 10, 3 );
function my_validate_extra_register_fields( $username, $email, $validation_errors ) {

    if ( isset( $_POST['billing_vat'] ) && empty( $_POST['billing_vat'] ) ) {
        $validation_errors->add( 'billing_vat_error', __( 'VAT number is required!', 'woocommerce' ) );
    }   

    return $validation_errors;
}

/* Below code save extra fields when new user register */
add_action( 'woocommerce_created_customer', 'my_save_extra_register_fields' ); 
function my_save_extra_register_fields( $customer_id ) {

    if ( isset( $_POST['billing_vat'] ) ) {     

        // VAT field which is used in WooCommerce
        update_user_meta( $customer_id, 'billing_vat', sanitize_text_field( $_POST['billing_first_name'] ) );
    }

}


/* ---------------------- Account page ----------------------- */

/* Show custom fields on Account details page */
add_action( 'woocommerce_edit_account_form', 'my_woocommerce_edit_account_form' );
function my_woocommerce_edit_account_form() {
    $user_id = get_current_user_id();
    $user    = get_userdata( $user_id );

    if ( !$user ) return;

    $billing_vat = get_user_meta( $user_id, 'billing_vat', true );
?>
    <fieldset>
        <legend>Custom information</legend>

        <p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
            <label for="billing_vat">Billing VAT</label>
            <input type="text" name="billing_vat" id="billing_vat" value="<?php echo esc_attr( $billing_vat ); ?>" class="input-text" />
        </p>
        <div class="clearfix"></div>

    </fieldset>
   <?php
}

/* Below code save extra fields when account details page form submitted */
add_action( 'woocommerce_save_account_details', 'my_woocommerce_save_account_details' );
function my_woocommerce_save_account_details( $user_id ) {

    if ( isset( $_POST['billing_vat'] ) ) {
        update_user_meta( $user_id, 'billing_vat', sanitize_text_field( $_POST['billing_vat'] ) );
    }

}

您可以根据需要添加更多自定义字段。

是的,您可以使用woocommerce\u billing\u fieldsfilter hook在my account/edit address/billing/下添加自定义字段。

因此,代码如下所示:

/* Add field under my account billing  */
add_filter( 'woocommerce_billing_fields', 'my_woocommerce_billing_fields' );
function my_woocommerce_billing_fields( $fields ) {

    $user_id = get_current_user_id();
    $user    = get_userdata( $user_id );

    if ( !$user ) return;

    $fields['billing_vat'] = array(
        'type'      => 'text',
        'label'     => __('VAT', 'woocommerce'),
        'placeholder'   => _x('VAT Number', 'placeholder', 'woocommerce'),
        'required'  => true,
        'class'     => array('form-row'),
        'clear'     => true,
        'default'   => get_user_meta( $user_id, 'billing_vat', true ) // assing default value if any
    );

    return $fields;
}

/* Format custom field to show on my account billing  */
add_filter( 'woocommerce_my_account_my_address_formatted_address', 'custom_my_account_my_address_formatted_address', 10, 3 );
function custom_my_account_my_address_formatted_address( $fields, $customer_id, $name ) {

    $fields['vat']  = get_user_meta( $customer_id, $name . '_vat', true );

    return $fields;
}

/* Replace the key for custom field to show on my account billing  */
add_filter( 'woocommerce_formatted_address_replacements', 'custom_formatted_address_replacements', 10, 2 );
function custom_formatted_address_replacements( $address, $args ) {
    $address['{vat}'] = '';

    if ( ! empty( $args['vat'] ) ) {
        $address['{vat}'] = __( 'VAT Number', 'woocommerce' ) . ': ' . $args['vat'];
    }

    return $address;
}   
add_filter( 'woocommerce_localisation_address_formats', 'custom_localisation_address_format' );
function custom_localisation_address_format( $formats ) {

    foreach($formats as $key => $value) :
        $formats[$key] .= "\n\n{vat}";
    endforeach;

    return $formats;
}
 类似资料:
  • 在使用PayPal Adaptive的链式支付时,是否可以传递客户的账单地址?目前,用户在我的市场商店中输入他们的运输和账单地址,然后必须在贝宝结账页面上再次输入他们的姓名、电子邮件地址和账单地址,如果他们使用贝宝的客人结账选项(用借记卡/信用卡支付)。理想情况下,我想以某种方式通过这一点,当他们从我的结账移动到贝宝支付屏幕,这是通过并行支付使用自适应支付(经典API)。

  • 简言之: 我想在“daypart”上显示一个新字段。这是一个具有3个选项的下拉字段 其他信息: 我需要将daypart保存在core签出字段中,因为商店会同步到另一个不同步订单元数据的配送服务。 这是代码:

  • 非标准账单与开票的几种情况: 1、合作模式为B2B2C的特殊开票业务,如翼支付等客户; 2、账单包含返点、其他项非系统自动计算的内容; 3、集团公司拆分账单后 按分子公司确认账单、开票;

  • 说明 alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口) 官方文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayApp\Fund\Transfer\Request 属性 名称

  • 在WooCommerce中,当订单处于处理状态时,我希望在“我的帐户”页面上显示一个操作按钮,允许客户通过更改订单状态以完成来确认订单已经到达。 我已经看到允许客户通过电子邮件相关的问题代码改变订单的状态(没有答案),这并没有真正帮助实现我的目标。 客户是否可以通过将订单状态更改为“已完成”来确认订单是否已到达?

  • 大家好,我通过搜索并找到解决方案,对我在woocommerce上的结帐进行了一些编辑。 到目前为止,我已经做到了,所以我跳过购物车/篮子,直接去结账,并重命名了订单笔记文件。 我正在挣扎的是如何将订单注释字段移动到订单评论上方。我知道我需要使用这个woocommerce_checkout_before_order_review但我不知道如何使用。任何帮助都会很棒吗?

  • 我想将woocommerce结帐页面的“订单注释”文本字段更改为“特殊注释”。但是我找不到这个文件的确切位置。在我的localhost文件夹中可以在哪里找到此文件? 这是页面的截图: