在WooCommerce的后端创建订单时,设置客户“免除增值税”

问题描述 投票:0回答:1

我想在woocommerce中添加一个操作,以便在后端创建时从订单中删除税,并将特殊用户作为客户。

此代码适用于网站上的正常订单处理,但不适用于后端

add_action( 'woocommerce_checkout_update_order_review', 'remove_tax_from_user' );
add_action( 'woocommerce_before_cart_contents', 'remove_tax_from_user' );

function remove_tax_from_user( $post_data ) {
  global $woocommerce;
  $username = $woocommerce->customer->get_username();
  $user = get_user_by('login',$username);
  if($user)
  { 
    if( get_field('steuer_befreit', "user_{$user->ID}") ):
    $woocommerce->customer->set_is_vat_exempt( true );
    endif;
  }
}
php wordpress woocommerce orders tax
1个回答
1
投票

在后端客户需要在点击“添加订单”之前“免除增值税”。

您可以尝试使用在订单数据保存在后端之前触发的钩子save_post_shop_order,这样:

add_action( 'save_post_shop_order', 'backend_remove_tax_from_user', 50, 3 );
function backend_remove_tax_from_user( $post_id, $post, $update ) {

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id; // Exit if it's an autosave

    if ( $post->post_status != 'publish' )
        return $post_id; // Exit if not 'publish' post status

    if ( ! current_user_can( 'edit_order', $post_id ) )
        return $post_id; // Exit if user is not allowed

    if( ! isset($_POST['customer_user']) ) return $post_id; // Exit

    if( $_POST['customer_user'] > 0 ){
        $customer_id = intval($_POST['customer_user']);
        if( get_field('steuer_befreit', "user_{$customer_id}") ){
            $wc_customer = new WC_Customer( $customer_id );
            $wc_customer->set_is_vat_exempt( true );
        }
    }
}

代码位于活动子主题(或主题)的function.php文件中。

但这不起作用,你将无法使用任何现有的钩子来完成这项工作。唯一的方法是让第一个客户免除增值税,然后你可以为这个客户添加订单。

© www.soinside.com 2019 - 2024. All rights reserved.