programing

Woocommerce 3에서 카트 품목 가격 변경

powerit 2023. 3. 9. 22:24
반응형

Woocommerce 3에서 카트 품목 가격 변경

아래 기능을 사용하여 카트의 상품 가격을 변경하려고 합니다.

    add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price' 
     );
      function add_custom_price( $cart_object ) {
         foreach ( $cart_object->cart_contents as $key => $value ) {
         $value['data']->price = 400;
        } 
     }

WooCommerce 버전 2.6.x에서는 정상적으로 동작하고 있었지만 버전 3.0 이상에서는 동작하지 않습니다.

WooCommerce 버전 3.0+에서 작동하려면 어떻게 해야 합니까?

감사해요.

업데이트 2021 (미니카트 커스텀 아이템 가격 취급)

WooCommerce 버전 3.0+에서는 다음이 필요합니다.

  • 대신 후크를 사용합니다.
  • 대신 WC_Cart 방법을 사용하려면
  • 대신 WC_product method를 사용하는 방법

코드는 다음과 같습니다.

// Set custom cart item price
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
function add_custom_price( $cart ) {
    // This is necessary for WC 3.0+
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example | optional)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        $cart_item['data']->set_price( 40 );
    }
}

미니 카트(업데이트):

// Mini cart: Display custom price 
add_filter( 'woocommerce_cart_item_price', 'filter_cart_item_price', 10, 3 );
function filter_cart_item_price( $price_html, $cart_item, $cart_item_key ) {

    if( isset( $cart_item['custom_price'] ) ) {
        $args = array( 'price' => 40 );

        if ( WC()->cart->display_prices_including_tax() ) {
            $product_price = wc_get_price_including_tax( $cart_item['data'], $args );
        } else {
            $product_price = wc_get_price_excluding_tax( $cart_item['data'], $args );
        }
        return wc_price( $product_price );
    }
    return $price_html;
}

코드는 기능합니다.php 파일에는 액티브한 아이 테마(또는 활성 테마).

이 코드는 테스트되어 동작합니다(WooCommerce 5.1.x에서도 동작합니다).

주의: 몇 가지 특정 플러그인 또는 기타 커스터마이즈를 사용할 경우 후크 우선순위를 에서 (또는 )높일있습니다.

관련:

WooCommerce 버전 3.2.6에서는 priority를 1000으로 높이면 @Loic TheAztec의 답변이 유효합니다.

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);

priority 값을 시험했습니다.10,99그리고.999하지만 제 카트의 가격과 합계는 변경되지 않았습니다.get_price()그거set_price()실제로 물건의 가격을 정했습니다.

카트에 요금을 추가하는 커스텀 훅을 가지고 있으며, 제품 속성을 추가하는 서드파티 플러그인을 사용하고 있습니다.이러한 WooCommerce의 "add-ons"에 의해 지연이 발생하여 커스텀 액션을 연기해야 하는 것으로 생각됩니다.

언급URL : https://stackoverflow.com/questions/43324605/change-cart-item-prices-in-woocommerce-3

반응형