Set programmatically product sale price and cart item prices in Woocommerce 3

前端 未结 4 1816
走了就别回头了
走了就别回头了 2021-01-28 06:26

This is the continuation of : Set product sale price programmatically in WooCommerce 3

The answer works, however once a user adds the product to cart, the old price stil

4条回答
  •  抹茶落季
    2021-01-28 07:08

    Hope this code is helpful for you

    add_filter( 'woocommerce_get_price_html', 'bbloomer_alter_price_display', 9999, 2 );
    
    function bbloomer_alter_price_display( $price_html, $product ) {
    
      // ONLY ON FRONTEND
      if ( is_admin() ) return $price_html;
    
      // ONLY IF PRICE NOT NULL
      if ( '' === $product->get_price() ) return $price_html;
    
      // IF CUSTOMER LOGGED IN, APPLY 20% DISCOUNT   
      if ( wc_current_user_has_role( 'customer' ) ) {
        $orig_price = wc_get_price_to_display( $product );
        $price_html = wc_price( $orig_price * 0.80 );
      }
      return $price_html;
    }
    
    add_action( 'woocommerce_before_calculate_totals', 'bbloomer_alter_price_cart', 9999 );
    
    function bbloomer_alter_price_cart( $cart ) {
    
      if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    
      if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
    
      // IF CUSTOMER NOT LOGGED IN, DONT APPLY DISCOUNT
      if ( ! wc_current_user_has_role( 'customer' ) ) return;
    
      // LOOP THROUGH CART ITEMS & APPLY 20% DISCOUNT
      foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        $price = $product->get_price();
        $cart_item['data']->set_price( $price * 0.80 );
      }
    }
    

提交回复
热议问题