我想为类别中的所有产品添加折扣。我在这里尝试过此功能:
add_filter( 'woocommerce_get_price', 'custom_price_sale', 10, 2 );
function custom_price_sale( $price, $product ) {
if ( has_term( 'promocje-i-outlet', 'product_cat' ) ) {
$price = $price * ( 1 - 0.25 );
}
return $price;
}
仅在不使用if()
的情况下使用此方法:
$price = $price * ( 1 - 0.25 );
它工作正常,我在单个产品页面,购物车小部件,购物车页面,结帐页面和订单中看到折扣。但是,当我尝试为某个类别中的特定产品设置折扣时,该产品的价格会以正常价格添加到购物车中,并且没有折扣。
我也尝试在这里使用它:
get_the_terms( $product->ID, 'product_cat' );
然后创建类别数组并使用此:
if ( in_array( 'promocje-i-outlet', $kategoria ) ) {
$price = $price * ( 1 - 0.25 );
}
但是效果是一样的-动态定价无法正常工作,我收到此警告:
警告:in_array()期望参数2为数组,给定为空
你知道我在做什么错吗?
答案 0 :(得分:1)
我不确定100%,但这无法正常工作,因为这是在页面构建过程中遍历所有产品的函数中。 has_term
函数在这里无法使用,因为它仅在您位于特定的单一产品页面上时才起作用。
请在此尝试:
add_filter( 'woocommerce_product_get_price', 'custom_sale_price_for_category', 10, 2 );
function custom_sale_price_for_category( $price, $product ) {
//Get all product categories for the current product
$terms = wp_get_post_terms( $product->get_id(), 'product_cat' );
foreach ( $terms as $term ) {
$categories[] = $term->slug;
}
if ( ! empty( $categories ) && in_array( 'promocje-i-outlet', $categories, true ) ) {
$price *= ( 1 - 0.25 );
}
return $price;
}
请告诉我是否可行。