php – 在Woocommerce 3中从隐藏的输入字段自定义价格设置购物车商品价格

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 在Woocommerce 3中从隐藏的输入字段自定义价格设置购物车商品价格脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

在Woocommerce中,我使用jQuery计算单个产品页面上的自定义价格,现在需要将此值传递给购物车.

期望的行为是将从隐藏字段检索的新价格传递到购物车商品价格.

这是我的实际代码

// Hidden input field in single product page
add_action( 'woocommerce_before_add_to_cart_button', 'custom_hidden_product_field', 11, 0 );
function custom_hidden_product_field() {
    echo '<input type="hidden" id="hidden_field" name="custom_price" class="custom_price" value="">';
}


// The code to pass this data to the cart:
add_action( 'woocommerce_add_cart_item_data', 'save_custom_fields_data_to_cart', 10, 2 );
function save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {

    if( ! empty( $_REQUEST['custom_price'] ) ) {
        // Set the custom data in the cart item
        $cart_item_data['custom_data']['custom_price'] = $_REQUEST['custom_price'];
        $data = array( 'custom_price' => $_REQUEST['custom_price'] );

        // below statement make sure every add to cart action as unique line item
        $cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
        WC()->session->set( 'custom_data', $data );
    }
    return $cart_item_data;
}

并检查$data和$cart_item_data,看看它们是否都返回在页面上计算的custom_price数据.

但是,我去查看购物车,订单项的值仍为0.

我将var设置为等于WC() – > session-> set(‘custom_data’,$data);然后var_dump来检查它,但是这会返回NULL,这可能只是它返回的,我不完全确定,因为我从来没有使用它.

我还应该补充一点,我将产品后端的regular_price设置为0.当我擦除它(并将其留空)时,我得到了错误

我想知道我是否在这里遗漏了一些东西,如果有人可以为此提供一些启示?谢谢

解决方法:

首先出于测试目的,我们在隐藏输入字段中添加价格,因为您没有给出计算价格的代码

// Add a hidden input field (With a value of 20 for testing purpose)
add_action( 'woocommerce_before_add_to_cart_button', 'custom_hidden_product_field', 11 );
function custom_hidden_product_field() {
    echo '<input type="hidden" id="hidden_field" name="custom_price" class="custom_price" value="20">'; // Price is 20 for testing
}

然后,您将使用以下内容更改购物车项目价格(不需要WC_Session):

// Save custom calculated price as custom cart item data
add_filter( 'woocommerce_add_cart_item_data', 'save_custom_fields_data_to_cart', 10, 2 );
function save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {

    if( isset( $_POST['custom_price'] ) && ! empty( $_POST['custom_price'] )  ) {
        // Set the custom data in the cart item
        $cart_item_data['custom_price'] = (float) sanitize_text_field( $_POST['custom_price'] );

        // Make each item as a unique separated cart item
        $cart_item_data['unique_key'] = md5( microtime().rand() );
    }
    return $cart_item_data;
}

// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price', 30, 1 );
function change_cart_item_price( $cart ) {
    if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Set the new price
        if( isset($cart_item['custom_price']) ){
            $cart_item['data']->set_price($cart_item['custom_price']);
        }
    }
}

代码位于活动子主题(或活动主题)的function.PHP文件中.经过测试和工作.

相关:Woocommerce set_quantity crashes site when adding products to cart

脚本宝典总结

以上是脚本宝典为你收集整理的php – 在Woocommerce 3中从隐藏的输入字段自定义价格设置购物车商品价格全部内容,希望文章能够帮你解决php – 在Woocommerce 3中从隐藏的输入字段自定义价格设置购物车商品价格所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: