WooCommerce 客户帐单地址

2023-12-09

我正在尝试将增值税字段添加到客户账单地址,而这可以在结账页面上使用以下代码:

// 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 网上商店增值税号)进行注册。

有谁知道或有人可以为我指出正确的方向,我将如何执行此任务,不仅在结账页面上显示增值税号的账单字段,而且还在用户个人资料页面上显示,以及如何添加所有这些字段在注册页面上?

预先感谢您对此案的任何帮助!


嗯,这很简单。你的代码应该是这样的:

/* ---------------------- 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'] ) );
    }

}

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

是的,您可以在下面添加自定义字段my-account/edit-address/billing/通过使用woocommerce_billing_fields过滤钩。

因此,其代码应如下所示:

/* 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WooCommerce 客户帐单地址 的相关文章

  • WordPress - pre_get_posts 代替页面上的 query_posts

    我的情况有点复杂 我会尽量简洁地解释一下 我目前正在使用query posts修改我网站上自定义页面上的主查询 据我所知 它工作得很好 尽管我已经读到 由于多种不同的原因 使用 query posts 是不好的做法 那么 我为什么要使用qu
  • WordPress:wpdb->插入与wpdb->准备(wpdb->查询(“INSERT

    我想知道 WordPress 的插入功能是否也向数据添加斜杠 如果没有 准备查询方法似乎可以更好地防止 SQL 注入 我尝试在 codex api 中查找问题 然而 它似乎没有记录 谢谢 这个问题有点老了 自从提出这个问题以来 法典可能已经
  • 添加 current_page_item 类

    我正在研究 WordPress 设计 我想创建一个自定义菜单 items wp get nav menu items Menu array order gt ASC orderby gt menu order post type gt na
  • 通过 Ajax 加载内容时,WORDPRESS 音频播放器未加载,MediaElement.js 未应用

    我正在创建一个 WordPress 主题 当我使用 ajax 加载内容时 它不会将 MediaElements js 应用于我的音频播放器 因此不会显示音频 我认为这是因为 MediaElement js 加载了 wp footer 并且此
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • WordPress:tax_query 使用 OR 运算符的多个术语

    简单的查询 但由于某种原因没有显示正确的帖子 尝试显示带有每月待办事项清单术语 如果没有结果 则显示带有社区活动术语的帖子 有什么建议么 todo args array cat gt my category id posts per pag
  • 如何在wordpress中提交表单

    我正在使用 WordPress 3 3 1twentyten theme 我创建了一个插件来创建自定义表单 我已经在 WordPress 中成功安装了这个 我的插件文件代码如下
  • WP_Insert_Post 和 GUID 问题 [Wordpress]

    我的主题有一个发布表格 我在那里使用了 wp insert post 我的代码看起来像这样 post array ID gt post author gt post author post category gt post category
  • 将 Woocommerce 商店变成地理定位国家/地区的目录?

    我正在尝试将我的 woocommerce 商店转变为目录模式 取决于国家 地区 我只想在美国显示产品的价格并添加到购物车功能 我试图通过使用一个名为 的插件来实现这一点GeoIP检测 https wordpress org plugins
  • wordpress 利用浏览器缓存

    当我使用 W3 Total Cache 并正确启用所有内容时 不明白为什么 PageSpeed 对 利用浏览器缓存 的评分很差 https developers google com speed pagespeed insights url
  • 如何将 Facebook 页面帖子作为博客帖子拉入 WordPress?

    After 很多挣扎 https stackoverflow com questions 9709016 how to obtain a facebook page rss with the new timeline随着 Facebook
  • 在 WordPress 中的每个帖子后插入代码

    我想在 WordPress 的每篇文章后面插入一些代码 我知道你可以在这之后插入一些代码 例如在 single php 中 但是 如果我这样做 它就会把它放在错误的地方 这里有一个示例帖子 http www hardwareblog com
  • 如何将产品添加到现有且已付款的 Woocommerce 订单中?

    我有一个 WooCommerce 网站 我的一位客户在该网站上购买了产品和电缆 该客户购买了一根与其他产品不兼容的电缆 并询问我们是否可以向他运送价格相同的兼容电缆 也许这是一个愚蠢的问题 但我如何编辑已付款的订单 删除不兼容的电缆并添加正
  • 需要一个代码示例来展示如何使用 Codeigniter 发布到 WordPress

    有人可以分享一个代码示例 展示如何使用 CodeIgniter xml rpc 库向 Wordpress 制作基本博客文章吗 到目前为止 我有这个 尽管我使用了正确的组合 但它总是导致 错误的登录 通行证组合 function doPost
  • 以编程方式从 iPhone 向 WordPress 博客发表评论

    我在本地主机服务器上安装了 WordPress 博客 还制作了一个 iPhone 应用程序来通过 rss 浏览博客 我尝试使用此代码以编程方式发布评论 define post url http localhost web wp wp com
  • 使用 knit2wp 更新帖子

    我已经能够使用 knit2wp 成功发布到 WordPress 甚至可以使用图像 即使拥有这样的天赋 我也并非绝对正确 事实上 即使是上面的内容也需要一些工作 我希望稍后能够更新帖子 显然 RWordPress 软件包允许删除帖子 但如果无
  • 除非登录,否则 WooCommerce 不允许将产品添加到购物车

    最近出现此问题 如果我未登录 Wordpress 我无法将产品添加到我的 WooCommerce 购物车 它按应有的方式重定向到购物车页面 但显示 购物车为空 当我以任何角色的用户身份登录时 效果都很好 我搜索了一下 发现了这个线程 htt
  • WooCommerce 订阅 - 获取特定订阅的产品

    有没有办法从 product from subscription 谢谢这个帖子 https stackoverflow com questions 42791096 woocommerce subscriptions get related
  • 如何创建一个 WordPress 主页滑块,其中包含来自 4 个独特类别的最新或精选帖子的多个查询?

    我正在为我正在构建的 WordPress 网站创建一个滑块 我尝试构建的滑块共有 4 个幻灯片 框架 每个框架都需要显示特定类别中的最新帖子或特定类别中的特色帖子 我的意思是 4 张幻灯片 框架中的每张都代表一个单独的类别 Slide Fr
  • WordPress 事件按元生效日期排序

    我在获取参数数组以按 Wordpress 中的日期对事件列表进行排序时遇到一些问题 我在 Stack Overflow 和其他地方找到了几个建议的解决方案 但经过大量的试验和错误后 这些解决方案似乎都不起作用 这没什么花哨的 而且应该比这容

随机推荐