为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 中对免税客户禁用税收

在 WooCommerce 中对免税客户禁用税收

PHP
拉丁的传说 2024-01-19 17:20:55
我为我的 WooCommerce 安装启用了税收。它计算居住在我所在州的所有客户的税费(根据他们的送货地址)。这是 WooCommerce 的默认设置。有些客户是免税的,不应缴税。我在用户个人资料中创建了一个自定义字段,我可以在其中选中一个框来免除客户的税费。这工作正常。我试图找到一个钩子,我可以使用该选择来禁用税收,但我拥有的代码导致结帐页面对所有用户来说都是空白的。不显示错误消息。我的functions.php代码如下:////////////////////////////////////////* Tax exempt customers *////////////////////////////////////////// Add tax exempt custom user field in adminadd_action( 'show_user_profile', 'add_customer_tax_exempt_checkbox', 10 );add_action( 'edit_user_profile', 'add_customer_tax_exempt_checkbox', 10 );function add_customer_tax_exempt_checkbox( $user ){    ?>    <h3><?php _e("Tax status"); ?></h3>    <table class="form-table">        <tr>            <th><?php _e("Tax exempt"); ?></th>            <td>    <?php    woocommerce_form_field( 'tax_exempt', array(        'type'      => 'checkbox',        'class'     => array('input-checkbox'),        'label'     => __('Allowed'),    ), get_user_meta( $user->id, 'tax_exempt', true ) );    ?>            </td>        </tr>    </table>    <?php}// Save allowed custom user field in adminadd_action( 'personal_options_update', 'save_customer_tax_exempt_checkbox' );add_action( 'edit_user_profile_update', 'save_customer_tax_exempt_checkbox' );function save_customer_tax_exempt_checkbox( $user_id ){    if ( current_user_can( 'edit_user', $user_id ) ) {        update_user_meta( $user_id, 'tax_exempt', isset($_POST['tax_exempt']) ? '1' : '0' );    }}// Enabling or disabling tax calculation at checkoutadd_filter( 'woocommerce_product_tax_class', 'disable_tax_calculation' );function disable_tax_calculation( $tax_class, $product ) {   if ( get_user_meta( get_current_user_id(), 'tax_exempt', true ) ) {        $tax_class = 'Zero Rate';   }   return $tax_class;}////////////////////////////////////////* END: Tax exempt customers *////////////////////////////////////////
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

由于 Woocommerce 3woocommerce_product_tax_class钩子已被弃用并已被替换。我已经更新了您的第三个功能:


// Add tax exempt custom user field in admin

add_action( 'show_user_profile', 'add_customer_tax_exempt_checkbox', 10 );

add_action( 'edit_user_profile', 'add_customer_tax_exempt_checkbox', 10 );

function add_customer_tax_exempt_checkbox( $user )

{

    ?>

    <h3><?php _e("Tax status"); ?></h3>

    <table class="form-table">

        <tr>

            <th><?php _e("Tax exempt"); ?></th>

            <td>

    <?php


    woocommerce_form_field( 'tax_exempt', array(

        'type'      => 'checkbox',

        'class'     => array('input-checkbox'),

        'label'     => __('Allowed'),

    ), get_user_meta( $user->id, 'tax_exempt', true ) );


    ?>

            </td>

        </tr>

    </table>

    <?php

}


// Save allowed custom user field in admin

add_action( 'personal_options_update', 'save_customer_tax_exempt_checkbox' );

add_action( 'edit_user_profile_update', 'save_customer_tax_exempt_checkbox' );

function save_customer_tax_exempt_checkbox( $user_id )

{

    if ( current_user_can( 'edit_user', $user_id ) ) {

        update_user_meta( $user_id, 'tax_exempt', isset($_POST['tax_exempt']) ? '1' : '0' );

    }

}


// Enabling or disabling tax calculation at checkout

add_filter( 'woocommerce_product_get_tax_class', 'disable_tax_calculation', 10, 2 );

add_filter( 'woocommerce_product_variation_get_tax_class', 'disable_tax_calculation', 10, 2 );

function disable_tax_calculation( $tax_class, $product ) {

   if ( get_user_meta( get_current_user_id(), 'tax_exempt', true ) ) {

        $tax_class = 'Zero Rate';

   }

   return $tax_class;

}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该更好地工作。


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信