我试图覆盖包含我添加的选择框的某些产品的价格。我从头到脚跟着this tutorial,现在已经研究了一段时间了。
在我的functions.php中:
function calculate_core_fee( $cart_object ) {
if( !WC()->session->__isset( "reload_checkout" )) {
/* core price */
//$additionalPrice = WC()->session->get( 'coreCharge' );
//echo $additionalPrice;
$additionalPrice = 100;
foreach ( $cart_object->cart_contents as $key => $value ) {
if( isset( $value["addOn"] ) ) {
if( isset( $value['data']->price ) ) {
/* Version before 3.0 */
$orgPrice = floatval( $value['data']->price );
echo $orgPrice . " + ";
echo $additionalPrice . " = ";
$newPrice = $value['data']->price = ( $orgPrice + $additionalPrice );
echo $newPrice;
$value['data']->price = ( $orgPrice + $additionalPrice );
} else {
/* Woocommerce 3.0 + */
$orgPrice = floatval( $value['data']->get_price() );
$value['data']->set_price( $orgPrice + $additionalPrice );
}
}
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'calculate_core_fee', 99 );
奇怪的事情:最后一个if语句检查版本兼容性( b / c Wooc 3.0及以上需要" - > set_price"而不是" - >价格" )...但是,当我回显变量时,它只适用于" 版本3.0之前的"。
我目前正在使用WooCommerce 3.1.1版。我也在我的子主题中使用了cart.php模板,但我已将其更新为该文件的最新版本。
我不知道出了什么问题。
答案 0 :(得分:0)
好的,我在发布此内容后几乎立刻就知道了......但这是工作代码。
的functions.php:
function calculate_core_fee( $cart_object ) {
if( !WC()->session->__isset( "reload_checkout" )) {
/* core price */
$additionalPrice = WC()->session->get( 'coreCharge' );
//echo $additionalPrice;
//$additionalPrice = 100;
foreach ( $cart_object->cart_contents as $key => $value ) {
if( isset( $value["addOn"] ) ) {
/* Woocommerce 3.0 + */
$orgPrice = floatval( $value['data']->get_price() );
//echo $additionalPrice;
//echo $orgPrice;
$value['data']->set_price( $orgPrice + $additionalPrice );
}
}
}
}
add_action( 'woocommerce_before_calculate_totals', 'calculate_core_fee', 99 );
我所做的就是删除代码,该代码检查对象是否包含' price'自WooCommerce 3.0以来已经改变,它神奇地起作用。