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

我为我的 WooCommerce 安装启用了税收。它计算居住在我所在州的所有客户的税费(根据他们的送货地址)。这是 WooCommerce 的默认设置。


有些客户是免税的,不应缴税。我在用户个人资料中创建了一个自定义字段,我可以在其中选中一个框来免除客户的税费。这工作正常。


我试图找到一个钩子,我可以使用该选择来禁用税收,但我拥有的代码导致结帐页面对所有用户来说都是空白的。不显示错误消息。


我的functions.php代码如下:


///////////////////////////////////////

/* Tax exempt customers */

///////////////////////////////////////


// 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_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 */

///////////////////////////////////////


拉丁的传说
浏览 103回答 1
1回答

阿晨1998

由于 Woocommerce 3woocommerce_product_tax_class钩子已被弃用并已被替换。我已经更新了您的第三个功能:// 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 ){&nbsp; &nbsp; ?>&nbsp; &nbsp; <h3><?php _e("Tax status"); ?></h3>&nbsp; &nbsp; <table class="form-table">&nbsp; &nbsp; &nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <th><?php _e("Tax exempt"); ?></th>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <td>&nbsp; &nbsp; <?php&nbsp; &nbsp; woocommerce_form_field( 'tax_exempt', array(&nbsp; &nbsp; &nbsp; &nbsp; 'type'&nbsp; &nbsp; &nbsp; => 'checkbox',&nbsp; &nbsp; &nbsp; &nbsp; 'class'&nbsp; &nbsp; &nbsp;=> array('input-checkbox'),&nbsp; &nbsp; &nbsp; &nbsp; 'label'&nbsp; &nbsp; &nbsp;=> __('Allowed'),&nbsp; &nbsp; ), get_user_meta( $user->id, 'tax_exempt', true ) );&nbsp; &nbsp; ?>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </td>&nbsp; &nbsp; &nbsp; &nbsp; </tr>&nbsp; &nbsp; </table>&nbsp; &nbsp; <?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 ){&nbsp; &nbsp; if ( current_user_can( 'edit_user', $user_id ) ) {&nbsp; &nbsp; &nbsp; &nbsp; update_user_meta( $user_id, 'tax_exempt', isset($_POST['tax_exempt']) ? '1' : '0' );&nbsp; &nbsp; }}// Enabling or disabling tax calculation at checkoutadd_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 ) {&nbsp; &nbsp;if ( get_user_meta( get_current_user_id(), 'tax_exempt', true ) ) {&nbsp; &nbsp; &nbsp; &nbsp; $tax_class = 'Zero Rate';&nbsp; &nbsp;}&nbsp; &nbsp;return $tax_class;}代码位于活动子主题(或活动主题)的functions.php 文件中。它应该更好地工作。
打开App,查看更多内容
随时随地看视频慕课网APP