使用woocommerce_product_get_price hook

时间:2017-12-13 08:08:17

标签: php wordpress woocommerce cart checkout

我需要为Woocommerce前端的每个产品加倍价格。为此,我使用了以下代码:

add_filter( 'woocommerce_product_get_price', 'double_price', 10, 2 );
function double_price( $price, $product ){
    return $price*2;
}

但使用此代码时出错。结帐页面价格不正确。 例如,产品原始价格是10.我们用这个代码加倍价格。所以现在的产品价格是20。当我将此产品添加到购物车时,购物车和结帐页面价格为40.这意味着此次乘法将进行两次。

请帮助解决这个问题。

2 个答案:

答案 0 :(得分:2)

已更新要使价格加倍:

1)首先,您将代码限制为单个产品和存档页面:

add_filter( 'woocommerce_product_get_price', 'double_price', 10, 2 );
function double_price( $price, $product ){
    if( is_shop() || is_product_category() || is_product_tag() || is_product() )
        return $price*2;

    return $price;
}

2)然后,对于购物车和结帐页面,您将以这种方式更改购物车商品价格:

add_filter( 'woocommerce_add_cart_item', 'set_custom_cart_item_prices', 20, 2 );
function set_custom_cart_item_prices( $cart_data, $cart_item_key ) {
    // Price calculation
    $new_price = $cart_data['data']->get_price() * 2;

    // Set and register the new calculated price
    $cart_data['data']->set_price( $new_price );
    $cart_data['new_price'] = $new_price;

    return $cart_data;
}

add_filter( 'woocommerce_get_cart_item_from_session', 'set_custom_cart_item_prices_from_session', 20, 3 );
function set_custom_cart_item_prices_from_session( $session_data, $values, $key ) {
    if ( ! isset( $session_data['new_price'] ) || empty ( $session_data['new_price'] ) )
        return $session_data;

    // Get the new calculated price and update cart session item price
    $session_data['data']->set_price( $session_data['new_price'] );

    return $session_data;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试和工作。它将在购物车,结账和订单页面中按预期更改所有价格......

答案 1 :(得分:0)

是否有一种方法可以将变量传递给函数并返回可贵的价格?

add_filter( 'woocommerce_product_get_price', 'run_shortcodes_on_prices', 10, 3 );

function run_shortcodes_on_prices( $price , $string, $product){
    if( is_shop() || is_product_category() || is_product_tag() || is_product() )

    return $string;
}