一类的Wocommerce折扣

时间:2019-02-15 09:07:44

标签: woocommerce

我想为类别中的所有产品添加折扣。我在这里尝试过此功能:

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为数组,给定为空

你知道我在做什么错吗?

1 个答案:

答案 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;
}

请告诉我是否可行。