WooCommerce 3+에서 후크를 통해 제품 가격 변경
WooCommerce에서는 모든 제품 가격에 숫자를 곱해야 합니다.그래서 저는 (플러그인을 통해) 다음을 사용하고 있습니다.
add_filter('woocommerce_get_regular_price', array( $this, 'my_custom_price'), 99);
add_filter('woocommerce_get_price', array( $this, 'my_custom_price'), 99);
function my_custom_price( $original_price ) {
global $post, $woocommerce;
//Logic for calculating the new price here
$new_price = $original_price * 2;
//Return the new price (this is the price that will be used everywhere in the store)
return $new_price;
}
단, 바리에이션 제품에는 해당되지 않습니다.다음 훅을 시도해 봤지만 잘 되지 않습니다.
add_filter('woocommerce_get_variation_regular_price', array( $this, 'my_custom_price'), 99);
add_filter('woocommerce_get_variation_price', array( $this, 'my_custom_price'), 99);
반쯤 되는 건 이것뿐이에요.
add_filter('woocommerce_variation_prices_price', array( $this, 'my_custom_price'), 99);
하지만 그것은 선택된 변동 가격이 아니라 전체 가격을 변경했을 뿐입니다.아래 이미지를 참조해 주세요.가격은 BsF입니다.200이고 전체 가격은 200 x 2 = 400이지만 선택 시 변동 가격은 여전히 200을 나타냅니다.
주의: 실제로 변경해야 하므로 html 후크가 표시되지 않습니다.
제가 뭘 놓쳤거나 뭐 잘못된 거라도 있나요?
갱신하다 (2020년 12월)
1) 컨스트럭터 기능이 있는 플러그인 버전:
사용하고 있는 훅은 WooCommerce 3+에서는 권장되지 않습니다.
변동 가격을 포함한 모든 제품 가격에 적용되도록 하려면 다음을 사용해야 합니다.
## The following goes inside the constructor ##
// Simple, grouped and external products
add_filter('woocommerce_product_get_price', array( $this, 'custom_price' ), 99, 2 );
add_filter('woocommerce_product_get_regular_price', array( $this, 'custom_price' ), 99, 2 );
// Variations
add_filter('woocommerce_product_variation_get_regular_price', array( $this, 'custom_price' ), 99, 2 );
add_filter('woocommerce_product_variation_get_price', array( $this, 'custom_price' ), 99, 2 );
// Variable (price range)
add_filter('woocommerce_variation_prices_price', array( $this, 'custom_variable_price' ), 99, 3 );
add_filter('woocommerce_variation_prices_regular_price', array( $this, 'custom_variable_price' ), 99, 3 );
// Handling price caching (see explanations at the end)
add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'add_price_multiplier_to_variation_prices_hash' ), 99, 3 );
## This goes outside the constructor ##
// Utility function to change the prices with a multiplier (number)
public function get_price_multiplier() {
return 2; // x2 for testing
}
public function custom_price( $price, $product ) {
return (float) $price * get_price_multiplier();
}
public function custom_variable_price( $price, $variation, $product ) {
return (float) $price * get_price_multiplier();
}
public function add_price_multiplier_to_variation_prices_hash( $price_hash, $product, $for_display ) {
$price_hash[] = get_price_multiplier();
return $price_hash;
}
이 코드는 테스트되어 WooCommerce 3+에서만 완벽하게 동작합니다.
2) 테마 버전의 경우: 활성 자 테마(또는 활성 테마):
// Utility function to change the prices with a multiplier (number)
function get_price_multiplier() {
return 2; // x2 for testing
}
// Simple, grouped and external products
add_filter('woocommerce_product_get_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_get_regular_price', 'custom_price', 99, 2 );
// Variations
add_filter('woocommerce_product_variation_get_regular_price', 'custom_price', 99, 2 );
add_filter('woocommerce_product_variation_get_price', 'custom_price', 99, 2 );
function custom_price( $price, $product ) {
return (float) $price * get_price_multiplier();
}
// Variable (price range)
add_filter('woocommerce_variation_prices_price', 'custom_variable_price', 99, 3 );
add_filter('woocommerce_variation_prices_regular_price', 'custom_variable_price', 99, 3 );
function custom_variable_price( $price, $variation, $product ) {
// Delete product cached price (if needed)
// wc_delete_product_transients($variation->get_id());
return (float) $price * get_price_multiplier();
}
// Handling price caching (see explanations at the end)
add_filter( 'woocommerce_get_variation_prices_hash', 'add_price_multiplier_to_variation_prices_hash', 99, 3 );
function add_price_multiplier_to_variation_prices_hash( $price_hash, $product, $for_display ) {
$price_hash[] = get_price_multiplier();
return $price_hash;
}
woocommerce 3+에서 테스트 및 동작
판매 중인 제품에는 다음과 같은 후크가 있습니다.
woocommerce_product_get_sale_price
(간단하고 그룹화된 외부 제품)woocommerce_variation_prices_sale_price
(가변 제품(최소-최대)woocommerce_product_variation_get_sale_price
(제품의 종류)
캐시된 가격과 woocommerce 3:
캐시 가격의 변동에 관련된 3가지 필터 후크는 다음과 같습니다.
woocommerce_variation_prices_price
woocommerce_variation_prices_regular_price
woocommerce_variation_prices_sale_price
Woocommerce 3에서 도입되었습니다.
woocommerce_get_variation_prices_hash
필터 후크를 사용하면 이 후크가 실행될 때마다 관련 과도기를 삭제하지 않고 캐시된 변동 가격을 훨씬 더 효율적으로 갱신할 수 있습니다.
따라서 퍼포먼스는 계속 향상됩니다(Matthew Clark 덕분에 더 나은 방법을 찾을 수 있었습니다).
참조: 캐싱 및 동적 가격 설정– get_variation_prices 메서드 변경 예정
위젯(최소 및 최대 가격)을 사용하여 제품 가격을 필터링하려면 다음 후크를 사용하십시오.
woocommerce_price_filter_widget_min_amount
그것은 하나의 논거가 있다$price
woocommerce_price_filter_widget_max_amount
그것은 하나의 논거가 있다$price
언급URL : https://stackoverflow.com/questions/45806249/change-product-prices-via-a-hook-in-woocommerce-3
'programing' 카테고리의 다른 글
Postgres SQL의 '->>'과 '->'의 차이점은 무엇입니까? (0) | 2023.03.02 |
---|---|
반응형 Spring Web Client - SOAP 콜 발신 (0) | 2023.03.02 |
종료 코드 1 Spring Boot Intellij로 프로세스가 종료되었습니다. (0) | 2023.03.02 |
nginx try_files, proxy_pass 및 업스트림 (0) | 2023.03.02 |
적발되지 않은 불변 위반:리렌더가 너무 많아무한 루프를 방지하기 위해 리액트는 렌더링 수를 제한합니다. (0) | 2023.03.02 |