当前位置: 首页 > 知识库问答 >
问题:

定制WooCommerce价格不从购物车传递到结账

南宫俊喆
2023-03-14

我正在建一家woocommerce商店,出售古董地图,包括原始地图和数码地图。因此,地图被设置为同一产品的两种变体:“原件”和“打印件”。“Original”只是原始的古董地图,但“Print”有很多选项,如框架、安装和打印尺寸,这些选项由用户使用jquery在单个产品页面中设置。

我已经成功地允许用户从单一产品页面的一系列选项中进行选择,从而根据他们选择的尺寸、数量、框架和安装选项动态生成他们所购买产品的价格。

这是使用jquery完成的,选项(包括价格)使用隐藏字段和自定义数据传递到购物车,如下所示,其中isset($_REQUEST['price'])指jquery设置的隐藏价格字段(这些字段用于框架、安装、大小等,但这给出了一个想法:

if(isset($_REQUEST['price']) && ! empty( 'price' )) {

    $order_item_price = sanitize_text_field($_REQUEST['price']);

    $cart_item_data['custom_data']['order_price'] = array(
      'label' => 'Total this item',
      'value' => '£' . $order_item_price
    );
}

…这很好用。价格和总价(以及有关产品的其他自定义信息)显示在购物车中,购物车底部的总价与产品价格相符。我使用此功能来实现以下目标:

function update_price_in_cart( $cart_obj ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    if( ! is_cart() ) {
        return;
    }  
    // Iterate through each cart item
    foreach( $cart_obj->get_cart() as $item_key=>$cart_item ) {

        if( isset( $cart_item['total_price'] ) || isset( $cart_item['total_price_original'] ) ) {
            $price = $cart_item['total_price'] + $cart_item['total_price_original'];
            $cart_item['data']->set_price( ( $price ) );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'update_price_in_cart', 10, 1 );

问题是当用户进行结帐时。使用隐藏字段(帧类型、装载类型、大小、价格)创建的所有数据显示在页面左侧的产品下方,但右侧订购的每个产品旁边的总计设置为woocommerce产品在wordpress中设置的“打印”变体的原始价格集。

我试过用这样的方法进行约会(下面是一个使用静态值的测试):

function update_price_in_checkout($cart_obj) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    var_dump($cart_item_data['custom_data']['order_price']);

    if( isset( $cart_item['total_price'] ) || isset( $cart_item['total_price_original'] ) ) {
         WC()->cart->total = 597;
    } else {
        WC()->cart->total = 1;
    }
}
add_action( 'woocommerce_review_order_before_order_total', 'update_price_in_checkout' );

...但是a.这只接受静态数字,因为它不接收隐藏的字段,b.它不触及结账右侧的单个产品价格。

总之,我需要找到一种方法,用基于用户输入的计算总数替换右侧显示的基本变化产品价格。它在购物车页面上运行良好,但不会转移到结帐页面。

深入研究stackoverflow,我认为在woocommerce\u checkout\u create\u order\u line\u item中设置它可能是一个想法,但我不知道如何做到这一点。

有什么想法吗?

共有1个答案

牟飞沉
2023-03-14

以下代码将向购物车项目数据中添加自定义的产品价格选择选项(从隐藏的产品字段),并更新购物车项目价格:

// Get custom field value, calculate new item price, save it as custom cart item data
add_filter( 'woocommerce_add_cart_item_data', 'add_custom_field_data', 20, 3 );
function add_custom_field_data( $cart_item_data, $product_id, $variation_id ) {
    if (isset($_REQUEST['price']) && !empty($_REQUEST['price'])) {
        $cart_item_data['custom_price'] = sanitize_text_field($_REQUEST['price']);
        $cart_item_data['unique_key']   = md5(microtime().rand());
    }
    return $cart_item_data;
}

// Update price
add_action( 'woocommerce_before_calculate_totals', 'update_price_in_cart', 10, 1 );
function update_price_in_cart( $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 ) {
        if( isset( $cart_item['custom_price'] ) ) {
            // Add options to the product price
            $cart_item['data']->set_price( $cart_item['data']->get_price() + $cart_item['custom_price'] );
        }
    }
}

代码function.php活动子主题(或活动主题)的文件中。测试和工作。

 类似资料:
  • 我使用WooCommerce Wordpress中的以下代码,通过一个模板,使用add_to_cart($product_id)功能添加了许多产品。 现在,我希望通过此模板为每个产品添加自定义价格。现在购物车中的价格和数据库中的价格一样,但我想通过这一点添加我的自定义价格。有人能帮我做同样的事吗。谢谢

  • 我见过很多例子,都是用客户价格将商品添加到WC购物车中,但没有一个是动态添加的。我正在尝试在一个接收POST变量的短代码函数中执行。。。。 这当然会将项目添加到购物车,但价格为零,我意识到我需要以某种方式将此数组保存回WC购物车数据。这种方法是可能的还是只能通过过滤器或操作钩子来完成?如果是这样,我如何保存改变的数组回到购物车的内容,或使其工作添加一个项目与公布的价格?非常感谢任何指导。 感谢do

  • 在WooCommerce中,我希望有一个复选框,当按下时,它会将一个产品添加到我的购物车中,并且该产品的价格是购物车总价格的3%。 基于“在Woocommerce结帐页面中将产品添加到购物车的复选框字段”回答线程,并进行了一些编辑以满足我的需要,以下是我的代码: 它添加产品精细,一切都好。然而,当我设定价格时,它没有更新。 好的,这是未选中的复选框。 这是选中后的复选框。如您所见,项目的值为46.

  • 我使用“从Woocommerce中的functions.php文件中添加到购物车按钮上显示价格”的答案代码,在简单的产品中添加价格。 但我想改进这个功能,动态显示选择的变异价格内按钮。在变体产品页面上使用此代码,它只显示最低的价格。有什么解决办法吗?

  • 我怎么把这两个结合起来?在网上找不到任何东西。

  • 问题内容: 我正在尝试使用以下功能更改购物车中的产品价格: 它在WooCommerce版本2.6.x中正常运行,但在版本3.0+中不再正常运行 如何使其在WooCommerce 3.0+版中正常工作? 谢谢。 问题答案: 更新 (2018年9月) 使用 WooCommerce 3.0+版本, 您需要: 要改用 钩子。 要改用WC_Cart 方法 改用WC_product 方法 这是代码: 该代码在