在购物车中的结帐页面上显示购物车中相同的产品度量值选择

时间:2020-07-02 20:16:33

标签: php wordpress woocommerce cart checkout

此代码乘以产品的尺寸,并且在购物车中的所有内容都显示得很好,但是在付款页面上,它简化得太多了,我需要它们与在购物车中显示的内容完全一样。

如何在结帐页面上显示结果?

add_filter( 'woocommerce_cart_item_quantity', 'change_cart_item_displayed_quantity', 10, 3 );
function change_cart_item_displayed_quantity( $product_quantity, $cart_item_key, $cart_item ) {
    $escribiunidades = 0;   

    $posareacubierta = strpos($cart_item['data'], "_area");
    $areacubierta = substr($cart_item['data'],$posareacubierta);
    $areacubierta = str_replace("\"","", $areacubierta);
    $areacubierta = str_replace("area","", $areacubierta);
    $areacubierta = str_replace("value","", $areacubierta);
    $areacubierta = str_replace(",","", $areacubierta);
    $areacubierta = str_replace("_","", $areacubierta);
    $areacubierta = str_replace(":","", $areacubierta);
    $areacubierta = str_replace("]","", $areacubierta);
    $areacubierta = str_replace("}","", $areacubierta);
    if (is_numeric($areacubierta)) {
        $areacubierta = $cart_item['quantity'] * $areacubierta;
        $product_quantity =  $product_quantity . " <font style='font-size:15px; padding-left: 20px; padding-right: 10px;'>CAJA(S)</font><br><font style='font-size:15px;'>(Total: " . number_format($areacubierta,2) . " m2)</font>";

        $escribiunidades = 1;
    }

    $poswidth = strpos($cart_item['data'], "width");
    $posheight = strpos($cart_item['data'], "height");
    $areamaterial = substr($cart_item['data'],$poswidth,($posheight-$poswidth));
    $areamaterial = str_replace("\"","", $areamaterial);
    $areamaterial = str_replace("width","", $areamaterial);
    $areamaterial = str_replace("value","", $areamaterial);
    $areamaterial = str_replace(",","", $areamaterial);
    $areamaterial = str_replace("_","", $areamaterial);
    $areamaterial = str_replace(":","", $areamaterial);
    $areamaterial = str_replace("]","", $areamaterial);
    $areamaterial = str_replace("}","", $areamaterial);

    if (is_numeric($areamaterial) && $escribiunidades == 0) {
        $areamaterial = $cart_item['quantity'] * $areamaterial;
        $product_quantity =  $product_quantity . "<font style='font-size:15px; margin-left:-25px; float:center !important;'>METRO(S) LINEAL(ES)</font><br><font style='font-size:15px;'>(Total: " . number_format($areamaterial,2) . " m2)</font>";

        $escribiunidades = 1;
    }   


    return $product_quantity;
}

1 个答案:

答案 0 :(得分:1)

  • 要回答您的问题,要在结帐页面上显示此问题,可以使用woocommerce_checkout_cart_item_quantity钩子
// Display in checkout
function filter_woocommerce_checkout_cart_item_quantity( $item_qty, $cart_item, $cart_item_key ) { 

    // Do some magic...

    return $item_qty;
}
add_filter( 'woocommerce_checkout_cart_item_quantity', 'filter_woocommerce_checkout_cart_item_quantity', 10, 3 );

  • 由于我注意到您在当前代码中使用了许多不同的字符串函数,因此在此答案中,我将简单展示如何获取产品的宽度和高度作为数值。我相信这也是您原始代码中的意图。通过以不同的方式对我的答案进行论坛讨论,我相信您可以通过一种简单的方式重写原始代码
// Display in checkout
function filter_woocommerce_checkout_cart_item_quantity( $item_qty, $cart_item, $cart_item_key ) { 

    // Get width & height
    $poswidth = (int) $cart_item['data']->get_width();
    $posheight = (int) $cart_item['data']->get_height();
    
    // Do a certain calculation
    $areamaterial = $poswidth * $posheight;

    // Condition
    if ( is_numeric( $areamaterial ) ) {
        $areamaterial = $cart_item['quantity'] * $areamaterial;

        // Notice the use of .= opposite =
        // This is adding to versus overwriting the original value
        $item_qty .= '<span style="display:block">METRO(S) LINEAL(ES) Total: "' . number_format( $areamaterial, 2 ) . '" m2)</span>';
    }

    return $item_qty;
}
add_filter( 'woocommerce_checkout_cart_item_quantity', 'filter_woocommerce_checkout_cart_item_quantity', 10, 3 );