WooCommerce - 发布压倒一切的产品价格

时间:2017-07-12 17:53:44

标签: php wordpress woocommerce cart

我试图覆盖包含我添加的选择框的某些产品的价格。我从头到脚跟着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模板,但我已将其更新为该文件的最新版本。

以下是回显变量的结果: enter image description here

我不知道出了什么问题。

1 个答案:

答案 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以来已经改变,它神奇地起作用。

相关问题